forked from enlightenment/efl
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.
This commit is contained in:
parent
ecc4d192a3
commit
4fea84ea8b
|
@ -44,6 +44,9 @@ void
|
||||||
test_dayselector(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
test_dayselector(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
{
|
{
|
||||||
Evas_Object *win, *bx, *dayselector, *sunday;
|
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");
|
win = elm_win_util_standard_add("dayselector", "Day Selector");
|
||||||
elm_win_autodel_set(win, EINA_TRUE);
|
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");
|
sunday = elm_object_part_content_get(dayselector, "day0");
|
||||||
elm_object_signal_emit(sunday, "elm,type,weekend,style1", "");
|
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_resize(win, 350, 120);
|
||||||
evas_object_show(win);
|
evas_object_show(win);
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,9 @@ _elm_dayselector_smart_translate(Eo *obj, void *_pd, va_list *list)
|
||||||
|
|
||||||
Elm_Dayselector_Smart_Data *sd = _pd;
|
Elm_Dayselector_Smart_Data *sd = _pd;
|
||||||
|
|
||||||
|
if (sd->weekdays_names_set)
|
||||||
|
goto exit;
|
||||||
|
|
||||||
t = time(NULL);
|
t = time(NULL);
|
||||||
localtime_r(&t, &time_daysel);
|
localtime_r(&t, &time_daysel);
|
||||||
EINA_LIST_FOREACH(sd->items, l, it)
|
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);
|
evas_object_smart_callback_call(obj, SIG_LANG_CHANGED, NULL);
|
||||||
|
|
||||||
|
exit:
|
||||||
if (ret) *ret = EINA_TRUE;
|
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;
|
*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
|
static void
|
||||||
_elm_dayselector_smart_focus_direction_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
|
_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_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_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_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_OP_FUNC_SENTINEL
|
||||||
};
|
};
|
||||||
eo_class_funcs_set(klass, func_desc);
|
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_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_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_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
|
EO_OP_DESCRIPTION_SENTINEL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,8 @@ enum
|
||||||
ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_START_GET,
|
ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_START_GET,
|
||||||
ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_LENGTH_SET,
|
ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_LENGTH_SET,
|
||||||
ELM_OBJ_DAYSELECTOR_SUB_ID_WEEKEND_LENGTH_GET,
|
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
|
ELM_OBJ_DAYSELECTOR_SUB_ID_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -133,3 +135,33 @@ enum
|
||||||
* @ingroup Dayselector
|
* @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)
|
#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)
|
||||||
|
|
|
@ -112,3 +112,50 @@ EAPI void elm_dayselector_weekend_length_set(Evas_Object *obj, unsigned int le
|
||||||
* @ingroup Dayselector
|
* @ingroup Dayselector
|
||||||
*/
|
*/
|
||||||
EAPI unsigned int elm_dayselector_weekend_length_get(const Evas_Object *obj);
|
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);
|
||||||
|
|
|
@ -24,6 +24,7 @@ struct _Elm_Dayselector_Smart_Data
|
||||||
Elm_Dayselector_Day week_start;
|
Elm_Dayselector_Day week_start;
|
||||||
Elm_Dayselector_Day weekend_start;
|
Elm_Dayselector_Day weekend_start;
|
||||||
unsigned int weekend_len;
|
unsigned int weekend_len;
|
||||||
|
Eina_Bool weekdays_names_set : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct _Elm_Dayselector_Item Elm_Dayselector_Item;
|
typedef struct _Elm_Dayselector_Item Elm_Dayselector_Item;
|
||||||
|
|
Loading…
Reference in New Issue