glima pushed a commit to branch master.

commit ea592c8cd9e6f16834079ea4d2465e8f8e59b6ec
Author: cabelitos <[email protected]>
Date:   Thu Jul 11 15:34:58 2013 -0300

    Adding an API to Dayselector.
    
    This patches introduces a new API that will make the Dayselector more
    flexible. Before this patch the only way that the week this was being shown
    was according to the '%a' format type from the strftime() function,
    However the user may want to abbreviate using another criterion. This patch
    will allow the user to do that.
---
 src/bin/test_dayselector.c       | 21 +++++++++++
 src/lib/elm_dayselector.c        | 78 ++++++++++++++++++++++++++++++++++++++++
 src/lib/elm_dayselector_eo.h     | 32 +++++++++++++++++
 src/lib/elm_dayselector_legacy.h | 47 ++++++++++++++++++++++++
 src/lib/elm_widget_dayselector.h |  1 +
 5 files changed, 179 insertions(+)

diff --git a/src/bin/test_dayselector.c b/src/bin/test_dayselector.c
index d975bf1..65ae2da 100644
--- a/src/bin/test_dayselector.c
+++ b/src/bin/test_dayselector.c
@@ -44,6 +44,9 @@ void
 test_dayselector(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void 
*event_info __UNUSED__)
 {
    Evas_Object *win, *bx, *dayselector, *sunday;
+   Eina_List *weekdays_list;
+   const char *weekday;
+   const char *weekdays[] = {"S", "M", "T", "W", "T", "F", "S"};
 
    win = elm_win_util_standard_add("dayselector", "Day Selector");
    elm_win_autodel_set(win, EINA_TRUE);
@@ -82,6 +85,24 @@ test_dayselector(void *data __UNUSED__, Evas_Object *obj 
__UNUSED__, void *event
    sunday = elm_object_part_content_get(dayselector, "day0");
    elm_object_signal_emit(sunday, "elm,type,weekend,style1", "");
 
+   //Setting weekday name
+   dayselector = elm_dayselector_add(win);
+   evas_object_size_hint_weight_set(dayselector, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(dayselector, EVAS_HINT_FILL, 0.5);
+   elm_dayselector_weekdays_names_set(dayselector, weekdays);
+   elm_box_pack_end(bx, dayselector);
+   evas_object_show(dayselector);
+   evas_object_smart_callback_add(dayselector, "dayselector,changed", 
_changed_cb, NULL);
+
+   weekdays_list = elm_dayselector_weekdays_names_get(dayselector);
+
+   fprintf(stderr, "User set weekday names to: ");
+   EINA_LIST_FREE(weekdays_list, weekday)
+     {
+        fprintf(stderr, "%s\n", weekday);
+        eina_stringshare_del(weekday);
+     }
+
    evas_object_resize(win, 350, 120);
    evas_object_show(win);
 }
diff --git a/src/lib/elm_dayselector.c b/src/lib/elm_dayselector.c
index ec9ca72..ffede0a 100644
--- a/src/lib/elm_dayselector.c
+++ b/src/lib/elm_dayselector.c
@@ -67,6 +67,9 @@ _elm_dayselector_smart_translate(Eo *obj, void *_pd, va_list 
*list)
 
    Elm_Dayselector_Smart_Data *sd = _pd;
 
+   if (sd->weekdays_names_set)
+     goto exit;
+
    t = time(NULL);
    localtime_r(&t, &time_daysel);
    EINA_LIST_FOREACH(sd->items, l, it)
@@ -78,6 +81,7 @@ _elm_dayselector_smart_translate(Eo *obj, void *_pd, va_list 
*list)
 
    evas_object_smart_callback_call(obj, SIG_LANG_CHANGED, NULL);
 
+ exit:
    if (ret) *ret = EINA_TRUE;
 }
 
@@ -642,6 +646,76 @@ _weekend_length_get(Eo *obj EINA_UNUSED, void *_pd, 
va_list *list)
    *ret = sd->weekend_len;
 }
 
+EAPI void
+elm_dayselector_weekdays_names_set(Evas_Object *obj, const char *weekdays[])
+{
+   ELM_DAYSELECTOR_CHECK(obj);
+   eo_do((Eo *)obj, elm_obj_dayselector_weekdays_names_set(weekdays));
+}
+
+EAPI Eina_List *
+elm_dayselector_weekdays_names_get(const Evas_Object *obj)
+{
+   Eina_List *weekdays = NULL;
+
+   ELM_DAYSELECTOR_CHECK(obj) NULL;
+
+   eo_do((Eo *)obj, elm_obj_dayselector_weekdays_names_get(&weekdays));
+
+   return weekdays;
+}
+
+static void
+_weekdays_name_set(Eo *obj, void *_pd, va_list *list)
+{
+   int idx;
+   time_t now;
+   struct tm time_daysel;
+   Elm_Dayselector_Item *it;
+   char buf[1024];
+   const char **weekdays = va_arg(*list, const char **);
+   Elm_Dayselector_Smart_Data *sd = _pd;
+
+   if (weekdays)
+     sd->weekdays_names_set = EINA_TRUE;
+   else
+     {
+       now = time(NULL);
+       localtime_r(&now, &time_daysel);
+       sd->weekdays_names_set = EINA_FALSE;
+     }
+
+   for (idx = 0; idx < ELM_DAYSELECTOR_MAX; idx++)
+     {
+        it = _item_find(obj, idx);
+
+        if (sd->weekdays_names_set)
+          elm_object_text_set(VIEW(it), weekdays[idx]);
+        else
+        {
+          time_daysel.tm_wday = idx;
+          strftime(buf, sizeof(buf), "%a", &time_daysel);
+          elm_object_text_set(VIEW(it), buf);
+        }
+     }
+}
+
+static void
+_weekdays_name_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
+{
+   int idx;
+   const char *weekday;
+   Elm_Dayselector_Item *it;
+   Eina_List **weekdays = va_arg(*list, Eina_List **);
+
+   for (idx = 0; idx < ELM_DAYSELECTOR_MAX; idx++)
+     {
+        it = _item_find(obj, idx);
+        weekday = elm_object_text_get(VIEW(it));
+        *weekdays = eina_list_append(*weekdays, eina_stringshare_add(weekday));
+     }
+}
+
 static void
 _elm_dayselector_smart_focus_direction_manager_is(Eo *obj EINA_UNUSED, void 
*_pd EINA_UNUSED, va_list *list)
 {
@@ -675,6 +749,8 @@ _class_constructor(Eo_Class *klass)
         
EO_OP_FUNC(ELM_OBJ_DAYSELECTOR_ID(ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_START_GET),
 _weekend_start_get),
         
EO_OP_FUNC(ELM_OBJ_DAYSELECTOR_ID(ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_LENGTH_SET),
 _weekend_length_set),
         
EO_OP_FUNC(ELM_OBJ_DAYSELECTOR_ID(ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_LENGTH_GET),
 _weekend_length_get),
+        
EO_OP_FUNC(ELM_OBJ_DAYSELECTOR_ID(ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKDAYS_NAMES_SET),
 _weekdays_name_set),
+        
EO_OP_FUNC(ELM_OBJ_DAYSELECTOR_ID(ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKDAYS_NAMES_GET),
 _weekdays_name_get),
         EO_OP_FUNC_SENTINEL
    };
    eo_class_funcs_set(klass, func_desc);
@@ -691,6 +767,8 @@ static const Eo_Op_Description op_desc[] = {
      EO_OP_DESCRIPTION(ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_START_GET, "Get the 
weekend starting day of Dayselector."),
      EO_OP_DESCRIPTION(ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_LENGTH_SET, "Set the 
weekend length of Dayselector."),
      EO_OP_DESCRIPTION(ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_LENGTH_GET, "Get the 
weekend length of Dayselector."),
+     EO_OP_DESCRIPTION(ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKDAYS_NAMES_SET, "Set how 
the weekdays are displayed to the user"),
+     EO_OP_DESCRIPTION(ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKDAYS_NAMES_GET, "Get how 
the weekdays are displayed to the user"),
      EO_OP_DESCRIPTION_SENTINEL
 };
 
diff --git a/src/lib/elm_dayselector_eo.h b/src/lib/elm_dayselector_eo.h
index 5165a19..9bcce99 100644
--- a/src/lib/elm_dayselector_eo.h
+++ b/src/lib/elm_dayselector_eo.h
@@ -14,6 +14,8 @@ enum
    ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_START_GET,
    ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_LENGTH_SET,
    ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_LENGTH_GET,
+   ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKDAYS_NAMES_SET,
+   ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKDAYS_NAMES_GET,
    ELM_OBJ_DAYSELECTOR_SUB_ID_LAST
 };
 
@@ -133,3 +135,33 @@ enum
  * @ingroup Dayselector
  */
 #define elm_obj_dayselector_weekend_length_get(ret) 
ELM_OBJ_DAYSELECTOR_ID(ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_LENGTH_GET), 
EO_TYPECHECK(unsigned int *, ret)
+
+/**
+ * @def elm_obj_dayselector_weekdays_names_set
+ * @since 1.8
+ *
+ * Set the weekdays's names
+ *
+ * @param[in] day
+ * @param[in] weekdays
+ *
+ * @see elm_dayselector_weekdays_names_set
+ *
+ * @ingroup Dayselector
+ */
+#define elm_obj_dayselector_weekdays_names_set(weekdays) 
ELM_OBJ_DAYSELECTOR_ID(ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKDAYS_NAMES_SET), 
EO_TYPECHECK(const char **, weekdays)
+
+/**
+ * @def elm_obj_dayselector_weekdays_names_get
+ * @since 1.8
+ *
+ * Get the weekdays' names
+ *
+ * @param[in] day
+ * @param[out] ret
+ *
+ * @see elm_dayselector_weekdays_names_get
+ *
+ * @ingroup Dayselector
+ */
+#define elm_obj_dayselector_weekdays_names_get(ret) 
ELM_OBJ_DAYSELECTOR_ID(ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKDAYS_NAMES_GET), 
EO_TYPECHECK(Eina_List **, ret)
diff --git a/src/lib/elm_dayselector_legacy.h b/src/lib/elm_dayselector_legacy.h
index b9b8fac..01425bb 100644
--- a/src/lib/elm_dayselector_legacy.h
+++ b/src/lib/elm_dayselector_legacy.h
@@ -112,3 +112,50 @@ EAPI void   elm_dayselector_weekend_length_set(Evas_Object 
*obj, unsigned int le
  * @ingroup Dayselector
  */
 EAPI unsigned int   elm_dayselector_weekend_length_get(const Evas_Object *obj);
+
+/**
+ * Set weekdays names to be displayed by the Dayselector.
+ *
+ * @param obj The Dayselector object.
+ * @param weekdays Array of seven strings to be used as weekday names.
+ * @warning It must have 7 elements, or it will access invalid memory.
+ * @warning The strings must be NULL terminated ('@\0').
+ *
+ * By default or if @a weekdays is @c NULL, weekdays abbreviations get from 
system are displayed:
+ * E.g. for an en_US locale: "Sun, Mon, Tue, Wed, Thu, Fri, Sat"
+ *
+ * The first string should be related to Sunday, the second to Monday...
+ *
+ * The usage should be like this:
+ * @code
+ *   const char *weekdays[] =
+ *   {
+ *      "Sunday", "Monday", "Tuesday", "Wednesday",
+ *      "Thursday", "Friday", "Saturday"
+ *   };
+ *  elm_dayselector_wekdays_names_set(calendar, weekdays);
+ * @endcode
+ *
+ * @see elm_dayselector_weekdays_name_get()
+ * @see elm_dayselector_weekend_start_set()
+ *
+ * @ingroup Dayselector
+ */
+EAPI void elm_dayselector_weekdays_names_set(Evas_Object *obj, const char 
*weekdays[]);
+
+/**
+ * Get weekdays names displayed by the calendar.
+ *
+ * @param obj The Dayselector object.
+ * @return A list of seven strings to be used as weekday names.
+ *
+ * By default, weekdays abbreviations get from system are displayed:
+ * E.g. for an en_US locale: "Sun, Mon, Tue, Wed, Thu, Fri, Sat"
+ * The first string is related to Sunday, the second to Monday...
+ *
+ * @see elm_dayselector_weekdays_name_set()
+ *
+ *
+ * @ingroup Dayselector
+ */
+EAPI Eina_List *elm_dayselector_weekdays_names_get(const Evas_Object *obj);
diff --git a/src/lib/elm_widget_dayselector.h b/src/lib/elm_widget_dayselector.h
index 09c207d..0006868 100644
--- a/src/lib/elm_widget_dayselector.h
+++ b/src/lib/elm_widget_dayselector.h
@@ -24,6 +24,7 @@ struct _Elm_Dayselector_Smart_Data
    Elm_Dayselector_Day   week_start;
    Elm_Dayselector_Day   weekend_start;
    unsigned int          weekend_len;
+   Eina_Bool weekdays_names_set : 1;
 };
 
 typedef struct _Elm_Dayselector_Item       Elm_Dayselector_Item;

-- 

------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk

Reply via email to