forked from enlightenment/efl
calendar: show days of prev/next month.
Summary: Show days of previous and next month on the blank area of calendar. @feature Test Plan: See calendar widget on elementary_test. Reviewers: raster, seoz, woohyun, cedric Reviewed By: cedric Differential Revision: https://phab.enlightenment.org/D2728 Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
parent
32d9ccc76a
commit
d79b4c0055
|
@ -8,6 +8,9 @@
|
|||
style { name: "calendar_date_today_style";\
|
||||
base: "font="FN" font_size=10 color=#3399ff style=glow glow_color=#3399ff18 align=center";\
|
||||
}\
|
||||
style { name: "calendar_date_disabled_style";\
|
||||
base: "font="FN" font_size=10 color=#151515 style=shadow_bottom shadow_color=#ffffffc0 align=center";\
|
||||
}\
|
||||
|
||||
#define CAL_SPIN(_sufix, _signal_sufix, _text, _relative)\
|
||||
part { name: "left_bt"#_sufix; type: RECT;\
|
||||
|
@ -291,6 +294,10 @@
|
|||
inherit: "default" 0.0; \
|
||||
text.style: "calendar_date_today_style"; \
|
||||
} \
|
||||
description { state: "disabled" 0.0; \
|
||||
inherit: "default" 0.0; \
|
||||
text.style: "calendar_date_disabled_style"; \
|
||||
} \
|
||||
} \
|
||||
part { name: "cit_"#_pos".check"; mouse_events: 0; \
|
||||
scale: 1; \
|
||||
|
@ -354,6 +361,25 @@
|
|||
action: STATE_SET "default" 0.0; \
|
||||
target: "cit_"#_pos".text"; \
|
||||
} \
|
||||
program { \
|
||||
name: "cit_"#_pos".enable"; \
|
||||
signal: "cit_"#_pos",enable"; \
|
||||
source: "elm"; \
|
||||
script { \
|
||||
new st[31]; \
|
||||
new Float:vl; \
|
||||
get_state(PART:"cit_"#_pos".text", st, 30, vl); \
|
||||
if (!strcmp(st, "disabled")) \
|
||||
set_state(PART:"cit_"#_pos".text", "default", 0.0); \
|
||||
} \
|
||||
} \
|
||||
program { \
|
||||
name: "cit_"#_pos".disable"; \
|
||||
signal: "cit_"#_pos",disable"; \
|
||||
source: "elm"; \
|
||||
action: STATE_SET "disabled" 0.0; \
|
||||
target: "cit_"#_pos".text"; \
|
||||
} \
|
||||
program { \
|
||||
source: "cit_"#_pos".clicked"; \
|
||||
signal: "mouse,down,1"; \
|
||||
|
|
|
@ -90,13 +90,15 @@ _elm_calendar_elm_layout_sizing_eval(Eo *obj, Elm_Calendar_Data *_pd EINA_UNUSED
|
|||
}
|
||||
|
||||
static inline int
|
||||
_maxdays_get(struct tm *selected_time)
|
||||
_maxdays_get(struct tm *selected_time, int month_offset)
|
||||
{
|
||||
int month, year;
|
||||
|
||||
month = selected_time->tm_mon;
|
||||
month = (selected_time->tm_mon + month_offset) % 12;
|
||||
year = selected_time->tm_year + 1900;
|
||||
|
||||
if (month < 0) month += 12;
|
||||
|
||||
return _days_in_month
|
||||
[((!(year % 4)) && ((!(year % 400)) || (year % 100)))][month];
|
||||
}
|
||||
|
@ -145,6 +147,28 @@ _today(Elm_Calendar_Data *sd,
|
|||
sd->today_it = it;
|
||||
}
|
||||
|
||||
static inline void
|
||||
_enable(Elm_Calendar_Data *sd,
|
||||
int it)
|
||||
{
|
||||
char emission[32];
|
||||
|
||||
snprintf(emission, sizeof(emission), "cit_%i,enable", it);
|
||||
elm_layout_signal_emit(sd->obj, emission, "elm");
|
||||
sd->today_it = it;
|
||||
}
|
||||
|
||||
static inline void
|
||||
_disable(Elm_Calendar_Data *sd,
|
||||
int it)
|
||||
{
|
||||
char emission[32];
|
||||
|
||||
snprintf(emission, sizeof(emission), "cit_%i,disable", it);
|
||||
elm_layout_signal_emit(sd->obj, emission, "elm");
|
||||
sd->today_it = it;
|
||||
}
|
||||
|
||||
static char *
|
||||
_format_month_year(struct tm *selected_time)
|
||||
{
|
||||
|
@ -272,7 +296,7 @@ _access_calendar_item_register(Evas_Object *obj)
|
|||
ELM_CALENDAR_DATA_GET(obj, sd);
|
||||
|
||||
day = 0;
|
||||
maxdays = _maxdays_get(&sd->shown_time);
|
||||
maxdays = _maxdays_get(&sd->shown_time, 0);
|
||||
for (i = 0; i < 42; i++)
|
||||
{
|
||||
if ((!day) && (i == sd->first_day_it)) day = 1;
|
||||
|
@ -355,7 +379,7 @@ _access_calendar_register(Evas_Object *obj)
|
|||
static void
|
||||
_populate(Evas_Object *obj)
|
||||
{
|
||||
int maxdays, day, mon, yr, i;
|
||||
int maxdays, prev_month_maxdays, day, mon, yr, i;
|
||||
Elm_Calendar_Mark *mark;
|
||||
char part[12], day_s[3];
|
||||
struct tm first_day;
|
||||
|
@ -369,7 +393,8 @@ _populate(Evas_Object *obj)
|
|||
sd->filling = EINA_FALSE;
|
||||
if (sd->today_it > 0) _not_today(sd);
|
||||
|
||||
maxdays = _maxdays_get(&sd->shown_time);
|
||||
maxdays = _maxdays_get(&sd->shown_time, 0);
|
||||
prev_month_maxdays = _maxdays_get(&sd->shown_time, -1);
|
||||
mon = sd->shown_time.tm_mon;
|
||||
yr = sd->shown_time.tm_year;
|
||||
|
||||
|
@ -459,9 +484,19 @@ _populate(Evas_Object *obj)
|
|||
}
|
||||
|
||||
if ((day) && (day <= maxdays))
|
||||
snprintf(day_s, sizeof(day_s), "%i", day++);
|
||||
{
|
||||
_enable(sd, i);
|
||||
snprintf(day_s, sizeof(day_s), "%i", day++);
|
||||
}
|
||||
else
|
||||
day_s[0] = 0;
|
||||
{
|
||||
_disable(sd, i);
|
||||
|
||||
if (day <= maxdays)
|
||||
snprintf(day_s, sizeof(day_s), "%i", prev_month_maxdays - sd->first_day_it + i + 1);
|
||||
else
|
||||
snprintf(day_s, sizeof(day_s), "%i", i - sd->first_day_it - maxdays + 1);
|
||||
}
|
||||
|
||||
snprintf(part, sizeof(part), "cit_%i.text", i);
|
||||
elm_layout_text_set(obj, part, day_s);
|
||||
|
@ -641,7 +676,7 @@ _update_data(Evas_Object *obj, Eina_Bool month,
|
|||
if ((sd->select_mode != ELM_CALENDAR_SELECT_MODE_ONDEMAND)
|
||||
&& (sd->select_mode != ELM_CALENDAR_SELECT_MODE_NONE))
|
||||
{
|
||||
maxdays = _maxdays_get(&sd->shown_time);
|
||||
maxdays = _maxdays_get(&sd->shown_time, 0);
|
||||
if (sd->selected_time.tm_mday > maxdays)
|
||||
sd->selected_time.tm_mday = maxdays;
|
||||
|
||||
|
@ -778,7 +813,7 @@ _get_item_day(Evas_Object *obj,
|
|||
ELM_CALENDAR_DATA_GET(obj, sd);
|
||||
|
||||
day = selected_it - sd->first_day_it + 1;
|
||||
if ((day < 0) || (day > _maxdays_get(&sd->shown_time)))
|
||||
if ((day < 0) || (day > _maxdays_get(&sd->shown_time, 0)))
|
||||
return 0;
|
||||
|
||||
return day;
|
||||
|
@ -1100,7 +1135,7 @@ _elm_calendar_elm_widget_focus_next(Eo *obj, Elm_Calendar_Data *sd, Elm_Focus_Di
|
|||
items = eina_list_append(items, sd->inc_btn_year_access);
|
||||
|
||||
day = 0;
|
||||
maxdays = _maxdays_get(&sd->shown_time);
|
||||
maxdays = _maxdays_get(&sd->shown_time, 0);
|
||||
for (i = 0; i < 42; i++)
|
||||
{
|
||||
if ((!day) && (i == sd->first_day_it)) day = 1;
|
||||
|
@ -1132,7 +1167,7 @@ _access_obj_process(Evas_Object *obj, Eina_Bool is_access)
|
|||
else
|
||||
{
|
||||
day = 0;
|
||||
maxdays = _maxdays_get(&sd->shown_time);
|
||||
maxdays = _maxdays_get(&sd->shown_time, 0);
|
||||
for (i = 0; i < 42; i++)
|
||||
{
|
||||
if ((!day) && (i == sd->first_day_it)) day = 1;
|
||||
|
|
Loading…
Reference in New Issue