diff --git a/legacy/elementary/src/bin/test_dayselector.c b/legacy/elementary/src/bin/test_dayselector.c index d975bf11ae..65ae2da191 100644 --- a/legacy/elementary/src/bin/test_dayselector.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_dayselector.c b/legacy/elementary/src/lib/elm_dayselector.c index ec9ca7267d..ffede0a64d 100644 --- a/legacy/elementary/src/lib/elm_dayselector.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_dayselector_eo.h b/legacy/elementary/src/lib/elm_dayselector_eo.h index 5165a1933a..9bcce99122 100644 --- a/legacy/elementary/src/lib/elm_dayselector_eo.h +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_dayselector_legacy.h b/legacy/elementary/src/lib/elm_dayselector_legacy.h index b9b8fac635..01425bb5db 100644 --- a/legacy/elementary/src/lib/elm_dayselector_legacy.h +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_widget_dayselector.h b/legacy/elementary/src/lib/elm_widget_dayselector.h index 09c207df93..0006868b38 100644 --- a/legacy/elementary/src/lib/elm_widget_dayselector.h +++ b/legacy/elementary/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;