Add Elementary Calendar Widget

A calendar is a widget that allows the user to select a date. It has
support to adding marks (holidays and checks by default). The calendar
is displayed month at a time.

Weekdays names and the function used to format month and year to
be displayed can be set, giving more flexibility to this widget.



SVN revision: 51584
This commit is contained in:
Bruno Dilly 2010-08-23 18:45:36 +00:00
parent 0f5c7a96f2
commit cf8280b413
4 changed files with 1758 additions and 1 deletions

View File

@ -24930,4 +24930,722 @@ collections {
}
}
}
}
/////////////////////////////////////////////////////////////////////////////
// CALENDAR
/////////////////////////////////////////////////////////////////////////////
#define CH(_pos) \
part { name: "ch_"#_pos".base"; \
type: RECT; \
description { state: "default" 0.0; \
rel1 { \
relative: (_pos % 7 * 7 / 8 / 6) 0; \
to: "header"; \
} \
rel2 { \
relative: (_pos % 7 * 7 / 8 / 6 + 1 / 8) 1; \
to: "header"; \
} \
color: 0 0 0 0; \
visible: 0; \
} \
} \
part { name: "ch_"#_pos".text"; \
type: TEXT; \
effect: SOFT_SHADOW; \
mouse_events: 0; \
scale: 1; \
clip_to: "ch_"#_pos".clipper"; \
description { \
state: "default" 0.0; \
rel1.to: "ch_"#_pos".base"; \
rel2.to: "ch_"#_pos".base"; \
color: 0 0 0 255; \
color3: 0 0 0 0; \
text { \
font: "Sans"; \
size: 10; \
min: 1 1; \
align: 0.5 0.5; \
} \
} \
} \
part { name: "ch_"#_pos".clipper"; \
type: RECT; \
description { state: "default" 0.0; \
rel1.to: "ch_"#_pos".base"; \
rel2.to: "ch_"#_pos".base"; \
} \
}
#define CIT(_pos) \
part { name: "cit_"#_pos".rect"; \
type: RECT; \
description { state: "default" 0.0; \
rel1 { \
relative: (_pos % 7 * 7 / 8 / 6) \
(_pos / 8 / 5 - _pos % 7 / 8 / 5); \
to: "base"; \
} \
rel2 { \
relative: (_pos % 7 * 7 / 8 / 6 + 1 / 8) \
(_pos / 8 / 5 - _pos % 7 / 8 / 5 + 1 / 8); \
to: "base"; \
} \
color: 0 0 0 0; \
visible: 0; \
} \
} \
part { \
name: "cit_"#_pos".event"; \
type: RECT; \
repeat_events: 1; \
description { \
rel1.to: "cit_"#_pos".rect"; \
rel2.to: "cit_"#_pos".rect"; \
state: "default" 0.0; \
color: 0 0 0 0; \
} \
} \
part { name: "cit_"#_pos".shelf"; \
type: RECT; \
mouse_events: 0; \
description { state: "default" 0.0; \
rel1 { \
to: "cit_"#_pos".bg"; \
offset: -1 -1; \
} \
rel2 { \
to: "cit_"#_pos".bg"; \
} \
color: 200 200 200 255; \
} \
} \
part { name: "cit_"#_pos".hd"; \
type: RECT; \
mouse_events: 0; \
description { state: "default" 0.0; \
rel1 { \
to: "cit_"#_pos".bg"; \
offset: -1 -1; \
} \
rel2 { \
to: "cit_"#_pos".bg"; \
} \
visible: 0; \
color: 160 0 0 255; \
} \
description { state: "visible" 0.0; \
inherit: "default" 0.0; \
visible: 1; \
} \
} \
part { \
name: "cit_"#_pos".base_sh"; \
mouse_events: 0; \
description { \
state: "default" 0.0; \
align: 0.0 0.0; \
min: 0 1; \
rel1 { \
to: "cit_"#_pos".base"; \
relative: 0.0 1.0; \
offset: 0 0; \
} \
rel2 { \
to: "cit_"#_pos".base"; \
relative: 1.0 1.05; \
offset: -1 0; \
} \
image { \
normal: "ilist_item_shadow.png"; \
} \
fill.smooth: 0; \
} \
} \
part { \
name: "cit_"#_pos".base"; \
mouse_events: 0; \
description { \
state: "default" 0.0; \
rel1.to: "cit_"#_pos".rect"; \
rel2.to: "cit_"#_pos".rect"; \
rel2.offset: -1 -1; \
image { \
normal: "ilist_1.png"; \
border: 2 2 2 2; \
} \
fill.smooth: 0; \
} \
description { \
state: "today" 0.0; \
inherit: "default" 0.0; \
image.normal: "ilist_2.png"; \
color: 240 240 240 255; \
} \
} \
part { name: "cit_"#_pos".bg"; \
mouse_events: 0; \
description { state: "default" 0.0; \
visible: 0; \
color: 255 255 255 0; \
rel1 { \
to: "cit_"#_pos".rect"; \
relative: 0.0 0.0; \
} \
rel2 { \
to: "cit_"#_pos".rect"; \
relative: 1.0 1.0; \
offset: -1 -1; \
} \
image { \
normal: "bt_sm_base1.png"; \
border: 6 6 6 6; \
} \
image.middle: SOLID; \
} \
description { state: "selected" 0.0; \
inherit: "default" 0.0; \
visible: 1; \
color: 255 255 255 255; \
} \
} \
part { name: "cit_"#_pos".text"; \
type: TEXT; \
effect: SOFT_SHADOW; \
mouse_events: 0; \
scale: 1; \
description { \
state: "default" 0.0; \
rel1.to: "cit_"#_pos".bg"; \
rel2.to: "cit_"#_pos".bg"; \
color: 0 0 0 255; \
color3: 0 0 0 0; \
text { \
font: "Sans"; \
size: 10; \
min: 1 1; \
align: 0.5 0.5; \
} \
} \
description { state: "selected" 0.0; \
inherit: "default" 0.0; \
color: 224 224 224 255; \
color3: 0 0 0 64; \
} \
} \
part { name: "cit_"#_pos".fg1"; \
mouse_events: 0; \
description { state: "default" 0.0; \
visible: 0; \
color: 255 255 255 0; \
rel1.to: "cit_"#_pos".bg"; \
rel2.relative: 1.0 0.5; \
rel2.to: "cit_"#_pos".bg"; \
image { \
normal: "bt_sm_hilight.png"; \
border: 6 6 6 0; \
} \
} \
description { state: "selected" 0.0; \
inherit: "default" 0.0; \
visible: 1; \
color: 255 255 255 255; \
} \
} \
part { name: "cit_"#_pos".fg2"; \
mouse_events: 0; \
description { state: "default" 0.0; \
visible: 0; \
color: 255 255 255 0; \
rel1.to: "cit_"#_pos".bg"; \
rel2.to: "cit_"#_pos".bg"; \
image { \
normal: "bt_sm_shine.png"; \
border: 6 6 6 0; \
} \
} \
description { state: "selected" 0.0; \
inherit: "default" 0.0; \
visible: 1; \
color: 255 255 255 255; \
} \
} \
part { name: "cit_"#_pos".check"; \
mouse_events: 0; \
description { state: "default" 0.0; \
rel1 { \
to: "cit_"#_pos".bg"; \
relative: 0.7 0.6; \
offset: 1 1; \
} \
rel2 { \
to: "cit_"#_pos".bg"; \
relative: 1.1 1.2; \
offset: -2 -2; \
} \
aspect: 1 1; \
visible: 0; \
color: 255 0 0 255; \
image.normal: "check.png"; \
} \
description { state: "visible" 0.0; \
inherit: "default" 0.0; \
visible: 1; \
} \
} \
programs { \
program { \
name: "cit_"#_pos".go_active"; \
signal: "cit_"#_pos",selected"; \
source: "elm"; \
action: STATE_SET "selected" 0.0; \
target: "cit_"#_pos".bg"; \
target: "cit_"#_pos".fg1"; \
target: "cit_"#_pos".fg2"; \
target: "cit_"#_pos".text"; \
} \
program { \
name: "cit_"#_pos".go_passive"; \
signal: "cit_"#_pos",unselected"; \
source: "elm"; \
action: STATE_SET "default" 0.0; \
target: "cit_"#_pos".bg"; \
target: "cit_"#_pos".fg1"; \
target: "cit_"#_pos".fg2"; \
target: "cit_"#_pos".text"; \
} \
program { \
name: "cit_"#_pos".is_today"; \
signal: "cit_"#_pos",today"; \
source: "elm"; \
action: STATE_SET "today" 0.0; \
target: "cit_"#_pos".base"; \
} \
program { \
name: "cit_"#_pos".not_today"; \
signal: "cit_"#_pos",not_today"; \
source: "elm"; \
action: STATE_SET "default" 0.0; \
target: "cit_"#_pos".base"; \
} \
program { \
source: "cit_"#_pos".clicked"; \
signal: "mouse,clicked,1"; \
source: "cit_"#_pos".event"; \
action: SIGNAL_EMIT "elm,action,selected" #_pos; \
} \
program { \
name: "cit_"#_pos".clear"; \
signal: "cit_"#_pos",clear"; \
source: "elm"; \
action: STATE_SET "default" 0.0; \
target: "cit_"#_pos".check"; \
target: "cit_"#_pos".hd"; \
} \
program { \
name: "cit_"#_pos".checked"; \
signal: "cit_"#_pos",checked"; \
source: "elm"; \
action: STATE_SET "visible" 0.0; \
target: "cit_"#_pos".check"; \
} \
program { \
name: "cit_"#_pos".holiday"; \
signal: "cit_"#_pos",holiday"; \
source: "elm"; \
action: STATE_SET "visible" 0.0; \
target: "cit_"#_pos".hd"; \
} \
}
group { name: "elm/calendar/base/default";
images {
image: "shelf_inset.png" COMP;
image: "bt_base1.png" COMP;
image: "bt_hilight.png" COMP;
image: "bt_shine.png" COMP;
image: "bt_glow.png" COMP;
image: "bt_dis_base.png" COMP;
image: "bt_dis_hilight.png" COMP;
image: "sp_bt_l.png" COMP;
image: "sp_bt_r.png" COMP;
image: "bt_sm_base1.png" COMP;
image: "bt_sm_shine.png" COMP;
image: "bt_sm_hilight.png" COMP;
image: "ilist_1.png" COMP;
image: "ilist_2.png" COMP;
image: "ilist_item_shadow.png" COMP;
image: "check.png" COMP;
}
parts {
part { name: "bg";
type: RECT;
description { state: "default" 0.0;
min: 0 30;
rel1.offset: 1 1;
rel2.offset: -2 -2;
color: 255 255 255 0;
align: 0.0 0.5;
}
}
part { name: "spinner-base";
type: RECT;
mouse_events: 0;
description { state: "default" 0.0;
min: 24 24;
max: 999999 24;
rel1.to: "bg";
rel1.offset: 6 6;
rel2.to: "bg";
rel2.offset: -7 -7;
color: 255 255 255 0;
align: 0.0 0.0;
}
}
part { name: "conf_over_spinner";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "spinner-base";
rel1.offset: -3 -3;
rel2.to: "spinner-base";
rel2.offset: 2 2;
image {
normal: "shelf_inset.png";
border: 7 7 7 7;
middle: 0;
}
fill.smooth : 0;
}
}
part { name: "table-base";
type: RECT;
mouse_events: 0;
description { state: "default" 0.0;
min: 256 220;
rel1.to_x: "bg";
rel1.to_y: "spinner-base";
rel1.offset: 6 6;
rel1.relative: 0 1;
rel2.to: "bg";
rel2.offset: -7 -7;
color: 255 255 255 0;
}
}
part { name: "conf_over_table";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "table-base";
rel1.offset: -3 -3;
rel2.to: "table-base";
rel2.offset: 2 2;
image {
normal: "shelf_inset.png";
border: 7 7 7 7;
middle: 0;
}
fill.smooth : 0;
}
}
part { name: "header";
type: RECT;
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "table-base";
rel1.relative: 0 0;
rel2.to: "table-base";
rel2.relative: 1 0.1;
color: 255 255 255 0;
}
}
part { name: "base";
type: RECT;
mouse_events: 0;
description { state: "default" 0.0;
rel1.to_x: "table-base";
rel1.to_y: "header";
rel1.relative: 0 1;
rel1.offset: 3 0;
rel2.to: "table-base";
rel2.offset: -3 0;
color: 255 255 255 0;
}
}
part { name: "left_bt";
mouse_events: 1;
description { state: "default" 0.0;
rel1 { to: "spinner-base";
offset: 2 2;
}
rel2 { to: "spinner-base";
offset: -3 -3;
}
align: 0.0 0.5;
min: 24 24;
max: 24 24;
fixed: 1 1;
image {
normal: "bt_base1.png";
border: 6 6 6 6;
}
fill.smooth : 0;
}
description { state: "clicked" 0.0;
inherit: "default" 0.0;
image.normal: "bt_base1.png";
image.middle: SOLID;
}
}
part { name: "left_over1";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "left_bt";
rel2 { to: "left_bt";
relative: 1.0 0.5;
}
image {
normal: "bt_hilight.png";
border: 7 7 7 0;
}
}
}
part { name: "left_over2";
mouse_events: 1;
repeat_events: 1;
description { state: "default" 0.0;
rel1.to: "left_bt";
rel2.to: "left_bt";
image {
normal: "bt_shine.png";
border: 7 7 7 7;
}
}
}
part { name: "left_over3";
mouse_events: 1;
repeat_events: 1;
description { state: "default" 0.0;
color: 255 255 255 0;
rel1.to: "left_bt";
rel2.to: "left_bt";
image {
normal: "bt_glow.png";
border: 12 12 12 12;
}
fill.smooth : 0;
}
description { state: "clicked" 0.0;
inherit: "default" 0.0;
visible: 1;
color: 255 255 255 255;
}
}
part { name: "right_bt";
mouse_events: 1;
description { state: "default" 0.0;
rel1 { to: "spinner-base";
offset: -27 3;
}
rel2 { to: "spinner-base";
offset: -3 -3;
}
align: 1.0 0.5;
min: 24 24;
max: 24 24;
fixed: 1 1;
image {
normal: "bt_base1.png";
border: 5 5 4 12;
}
fill.smooth : 0;
}
description { state: "clicked" 0.0;
inherit: "default" 0.0;
image.normal: "bt_base1.png";
image.middle: SOLID;
}
}
part { name: "right_over1";
mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "right_bt";
rel2 { to: "right_bt";
relative: 1.0 0.5;
}
image {
normal: "bt_hilight.png";
border: 7 7 7 0;
}
}
}
part { name: "right_over2";
mouse_events: 1;
repeat_events: 1;
description { state: "default" 0.0;
rel1.to: "right_bt";
rel2.to: "right_bt";
image {
normal: "bt_shine.png";
border: 7 7 7 7;
}
}
}
part { name: "right_over3";
mouse_events: 1;
repeat_events: 1;
description { state: "default" 0.0;
color: 255 255 255 0;
rel1.to: "right_bt";
rel2.to: "right_bt";
image {
normal: "bt_glow.png";
border: 12 12 12 12;
}
fill.smooth : 0;
}
description { state: "clicked" 0.0;
inherit: "default" 0.0;
visible: 1;
color: 255 255 255 255;
}
}
part { name: "left_bt_icon";
repeat_events: 1;
description { state: "default" 0.0;
rel1.to: "left_bt";
rel2.to: "left_bt";
align: 0.5 0.5;
min: 16 16;
max: 16 16;
image.normal: "sp_bt_l.png";
}
}
part { name: "right_bt_icon";
repeat_events: 1;
description { state: "default" 0.0;
rel1.to: "right_bt";
rel2.to: "right_bt";
align: 0.5 0.5;
min: 16 16;
max: 16 16;
image.normal: "sp_bt_r.png";
}
}
part { name: "month_text";
type: TEXT;
mouse_events: 0;
scale: 1;
description { state: "default" 0.0;
align: 0 0.5;
fixed: 1 1;
rel1 { relative: 1.0 0.0;
offset: 3 2;
to: "left_bt";
to_y: "spinner-base";
}
rel2 { relative: 0.0 1.0;
offset: -3 -2;
to_x: "right_bt";
to_y: "spinner-base";
}
color: 0 0 0 255;
text {
font: "Sans,Edje-Vera";
size: 12;
min: 1 1;
align: 0.5 0.5;
}
}
}
CH(0) CH(1) CH(2) CH(3) CH(4) CH(5) CH(6)
CIT(0) CIT(1) CIT(2) CIT(3) CIT(4) CIT(5) CIT(6)
CIT(7) CIT(8) CIT(9) CIT(10) CIT(11) CIT(12) CIT(13)
CIT(14) CIT(15) CIT(16) CIT(17) CIT(18) CIT(19) CIT(20)
CIT(21) CIT(22) CIT(23) CIT(24) CIT(25) CIT(26) CIT(27)
CIT(28) CIT(29) CIT(30) CIT(31) CIT(32) CIT(33) CIT(34)
CIT(35) CIT(36) CIT(37) CIT(38) CIT(39) CIT(40) CIT(41)
}
programs {
program { name: "dec_start";
signal: "mouse,down,1";
source: "left_bt";
action: SIGNAL_EMIT "elm,action,decrement,start" "";
}
program { name: "dec_stop";
signal: "mouse,up,1";
source: "left_bt";
action: SIGNAL_EMIT "elm,action,stop" "";
}
program { name: "inc_start";
signal: "mouse,down,1";
source: "right_bt";
action: SIGNAL_EMIT "elm,action,increment,start" "";
}
program { name: "inc_stop";
signal: "mouse,up,1";
source: "right_bt";
action: SIGNAL_EMIT "elm,action,stop" "";
}
program {
name: "left_bt_click";
signal: "mouse,down,1";
source: "left_over2";
action: STATE_SET "clicked" 0.0;
target: "left_bt";
}
program {
name: "left_bt_unclick";
signal: "mouse,up,1";
source: "left_over2";
action: STATE_SET "default" 0.0;
target: "left_bt";
}
program {
name: "left_bt_click2";
signal: "mouse,down,1";
source: "left_over3";
action: STATE_SET "clicked" 0.0;
target: "left_over3";
}
program {
name: "left_bt_unclick2";
signal: "mouse,up,1";
source: "left_over3";
action: STATE_SET "default" 0.0;
transition: DECELERATE 0.5;
target: "left_over3";
}
program {
name: "right_bt_click";
signal: "mouse,down,1";
source: "right_over2";
action: STATE_SET "clicked" 0.0;
target: "right_bt";
}
program {
name: "right_bt_unclick";
signal: "mouse,up,1";
source: "right_over2";
action: STATE_SET "default" 0.0;
target: "right_bt";
}
program {
name: "right_bt_click2";
signal: "mouse,down,1";
source: "right_over3";
action: STATE_SET "clicked" 0.0;
target: "right_over3";
}
program {
name: "right_bt_unclick2";
signal: "mouse,up,1";
source: "right_over3";
action: STATE_SET "default" 0.0;
transition: DECELERATE 0.5;
target: "right_over3";
}
}
}
#undef CIT
#undef CH

View File

@ -1612,6 +1612,31 @@ extern "C" {
EAPI Eina_Bool elm_animator_operating_get(Elm_Animator *animator);
EAPI unsigned int elm_animator_repeat_get(Elm_Animator *animator);
/* calendar */
typedef enum {ELM_CALENDAR_UNIQUE, ELM_CALENDAR_DAILY, ELM_CALENDAR_WEEKLY, ELM_CALENDAR_MONTHLY, ELM_CALENDAR_ANNUALLY} Elm_Calendar_Mark_Repeat;
typedef struct _Elm_Calendar_Mark Elm_Calendar_Mark;
EAPI Evas_Object *elm_calendar_add(Evas_Object *parent);
EAPI const char **elm_calendar_weekdays_names_get(const Evas_Object *obj);
EAPI void elm_calendar_weekdays_names_set(Evas_Object *obj, const char *weekdays[]);
EAPI double elm_calendar_interval_get(const Evas_Object *obj);
EAPI void elm_calendar_interval_set(Evas_Object *obj, double interval);
EAPI void elm_calendar_min_max_year_get(const Evas_Object *obj, int *min, int *max);
EAPI void elm_calendar_min_max_year_set(Evas_Object *obj, int min, int max);
EAPI Eina_Bool elm_calendar_day_selection_enabled_get(const Evas_Object *obj);
EAPI void elm_calendar_day_selection_enabled_set(Evas_Object *obj, Eina_Bool enabled);
EAPI Eina_Bool elm_calendar_selected_time_get(const Evas_Object *obj, struct tm *selected_time);
EAPI void elm_calendar_selected_time_set(Evas_Object *obj, struct tm *selected_time);
EAPI void elm_calendar_format_function_set(Evas_Object *obj, char * (*format_function) (struct tm *stime));
EAPI Elm_Calendar_Mark *elm_calendar_mark_add(Evas_Object *obj, const char *mark_type, struct tm *mark_time, Elm_Calendar_Mark_Repeat repeat);
EAPI void elm_calendar_mark_del(Elm_Calendar_Mark *mark);
EAPI void elm_calendar_marks_clear(Evas_Object *obj);
EAPI const Eina_List *elm_calendar_marks_get(const Evas_Object *obj);
EAPI void elm_calendar_marks_draw(Evas_Object *obj);
/* smart callbacks called:
* changed - emitted when the user select a day or change the displayed
* month.
*/
#ifdef __cplusplus
}

View File

@ -78,6 +78,7 @@ elm_mapbuf.c \
elm_thumb.c \
elm_config.c \
elm_animator.c \
elm_calendar.c \
\
elc_anchorblock.c \
elc_anchorview.c \

File diff suppressed because it is too large Load Diff