forked from enlightenment/efl
[elm] calendar: spinners for month and year now
Adding a separated spinner for year. SVN revision: 82108
This commit is contained in:
parent
e8996b459d
commit
a8719f824d
|
@ -1,3 +1,293 @@
|
|||
#define CAL_SPIN(_sufix, _relative)\
|
||||
part { name: "left_bt_"#_sufix;\
|
||||
mouse_events: 1;\
|
||||
description { state: "default" 0.0;\
|
||||
rel1 { to: #_relative;\
|
||||
offset: 2 2;\
|
||||
}\
|
||||
rel2 { to: #_relative;\
|
||||
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_bt_"#_sufix"_over1";\
|
||||
mouse_events: 0;\
|
||||
description { state: "default" 0.0;\
|
||||
rel1.to: "left_bt_"#_sufix;\
|
||||
rel2 { to: "left_bt_"#_sufix;\
|
||||
relative: 1.0 0.5;\
|
||||
}\
|
||||
image {\
|
||||
normal: "bt_hilight.png";\
|
||||
border: 7 7 7 0;\
|
||||
}\
|
||||
}\
|
||||
}\
|
||||
part { name: "left_bt_"#_sufix"_over2";\
|
||||
mouse_events: 1;\
|
||||
repeat_events: 1;\
|
||||
description { state: "default" 0.0;\
|
||||
rel1.to: "left_bt_"#_sufix;\
|
||||
rel2.to: "left_bt_"#_sufix;\
|
||||
image {\
|
||||
normal: "bt_shine.png";\
|
||||
border: 7 7 7 7;\
|
||||
}\
|
||||
}\
|
||||
}\
|
||||
part { name: "left_bt_"#_sufix"_over3";\
|
||||
mouse_events: 1;\
|
||||
repeat_events: 1;\
|
||||
description { state: "default" 0.0;\
|
||||
color: 255 255 255 0;\
|
||||
rel1.to: "left_bt_"#_sufix;\
|
||||
rel2.to: "left_bt_"#_sufix;\
|
||||
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_"#_sufix"_icon";\
|
||||
repeat_events: 1;\
|
||||
description { state: "default" 0.0;\
|
||||
rel1.to: "left_bt_"#_sufix;\
|
||||
rel2.to: "left_bt_"#_sufix;\
|
||||
align: 0.5 0.5;\
|
||||
min: 16 16;\
|
||||
max: 16 16;\
|
||||
image.normal: "sp_bt_l.png";\
|
||||
}\
|
||||
description { state: "rtl" 0.0;\
|
||||
inherit: "default" 0.0;\
|
||||
image.normal: "sp_bt_r.png";\
|
||||
}\
|
||||
}\
|
||||
part { name: "right_bt_"#_sufix;\
|
||||
mouse_events: 1;\
|
||||
description { state: "default" 0.0;\
|
||||
rel1 { to: #_relative;\
|
||||
offset: -27 2;\
|
||||
}\
|
||||
rel2 { to: #_relative;\
|
||||
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_bt_"#_sufix"_over1";\
|
||||
mouse_events: 0;\
|
||||
description { state: "default" 0.0;\
|
||||
rel1.to: "right_bt_"#_sufix;\
|
||||
rel2 { to: "right_bt_"#_sufix;\
|
||||
relative: 1.0 0.5;\
|
||||
}\
|
||||
image {\
|
||||
normal: "bt_hilight.png";\
|
||||
border: 7 7 7 0;\
|
||||
}\
|
||||
}\
|
||||
}\
|
||||
part { name: "right_bt_"#_sufix"_over2";\
|
||||
mouse_events: 1;\
|
||||
repeat_events: 1;\
|
||||
description { state: "default" 0.0;\
|
||||
rel1.to: "right_bt_"#_sufix;\
|
||||
rel2.to: "right_bt_"#_sufix;\
|
||||
image {\
|
||||
normal: "bt_shine.png";\
|
||||
border: 7 7 7 7;\
|
||||
}\
|
||||
}\
|
||||
}\
|
||||
part { name: "right_bt_"#_sufix"_over3";\
|
||||
mouse_events: 1;\
|
||||
repeat_events: 1;\
|
||||
description { state: "default" 0.0;\
|
||||
color: 255 255 255 0;\
|
||||
rel1.to: "right_bt_"#_sufix;\
|
||||
rel2.to: "right_bt_"#_sufix;\
|
||||
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_"#_sufix"_icon";\
|
||||
repeat_events: 1;\
|
||||
description { state: "default" 0.0;\
|
||||
rel1.to: "right_bt_"#_sufix;\
|
||||
rel2.to: "right_bt_"#_sufix;\
|
||||
align: 0.5 0.5;\
|
||||
min: 16 16;\
|
||||
max: 16 16;\
|
||||
image.normal: "sp_bt_r.png";\
|
||||
}\
|
||||
description { state: "rtl" 0.0;\
|
||||
inherit: "default" 0.0;\
|
||||
image.normal: "sp_bt_l.png";\
|
||||
}\
|
||||
}\
|
||||
part { name: "text_"#_sufix;\
|
||||
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_"#_sufix;\
|
||||
to_y: #_relative;\
|
||||
}\
|
||||
rel2 { relative: 0.0 1.0;\
|
||||
offset: -3 -2;\
|
||||
to_x: "right_bt_"#_sufix;\
|
||||
to_y: #_relative;\
|
||||
}\
|
||||
color: 0 0 0 255;\
|
||||
text {\
|
||||
font: "Sans,Edje-Vera";\
|
||||
size: 12;\
|
||||
min: 1 1;\
|
||||
align: 0.5 0.5;\
|
||||
}\
|
||||
}\
|
||||
}\
|
||||
programs {\
|
||||
program { name: "dec_"#_sufix"_start";\
|
||||
signal: "mouse,down,1";\
|
||||
source: "left_bt_"#_sufix;\
|
||||
action: SIGNAL_EMIT "elm,action,decrement,"#_sufix",start" "";\
|
||||
}\
|
||||
program { name: "dec_"#_sufix"_stop";\
|
||||
signal: "mouse,up,1";\
|
||||
source: "left_bt_"#_sufix;\
|
||||
action: SIGNAL_EMIT "elm,action,"#_sufix",stop" ""; \
|
||||
}\
|
||||
program {\
|
||||
name: "left_bt_"#_sufix"_click";\
|
||||
signal: "mouse,down,1";\
|
||||
source: "left_bt_"#_sufix"_over2";\
|
||||
action: STATE_SET "clicked" 0.0;\
|
||||
target: "left_bt_"#_sufix;\
|
||||
}\
|
||||
program {\
|
||||
name: "left_bt_"#_sufix"_unclick";\
|
||||
signal: "mouse,up,1";\
|
||||
source: "left_bt_"#_sufix"over2";\
|
||||
action: STATE_SET "default" 0.0;\
|
||||
target: "left_bt_"#_sufix;\
|
||||
}\
|
||||
program {\
|
||||
name: "left_bt_"#_sufix"_click2";\
|
||||
signal: "mouse,down,1";\
|
||||
source: "left_bt_"#_sufix"_over3";\
|
||||
action: STATE_SET "clicked" 0.0;\
|
||||
target: "left_bt_"#_sufix"_over3";\
|
||||
}\
|
||||
program {\
|
||||
name: "left_bt_"#_sufix"_unclick2";\
|
||||
signal: "mouse,up,1";\
|
||||
source: "left_bt_"#_sufix"_over3";\
|
||||
action: STATE_SET "default" 0.0;\
|
||||
transition: DECELERATE 0.5;\
|
||||
target: "left_bt_"#_sufix"_over3";\
|
||||
}\
|
||||
program { name: "inc_"#_sufix"_start";\
|
||||
signal: "mouse,down,1";\
|
||||
source: "right_bt_"#_sufix;\
|
||||
action: SIGNAL_EMIT "elm,action,increment,"#_sufix",start" "";\
|
||||
}\
|
||||
program { name: "inc_"#_sufix"_stop";\
|
||||
signal: "mouse,up,1";\
|
||||
source: "right_bt_"#_sufix;\
|
||||
action: SIGNAL_EMIT "elm,action,"#_sufix",stop" "";\
|
||||
}\
|
||||
program {\
|
||||
name: "right_bt_"#_sufix"_click";\
|
||||
signal: "mouse,down,1";\
|
||||
source: "right_bt_"#_sufix"_over2";\
|
||||
action: STATE_SET "clicked" 0.0;\
|
||||
target: "right_bt_"#_sufix;\
|
||||
}\
|
||||
program {\
|
||||
name: "right_bt_"#_sufix"_unclick";\
|
||||
signal: "mouse,up,1";\
|
||||
source: "right_bt_"#_sufix"_over2";\
|
||||
action: STATE_SET "default" 0.0;\
|
||||
target: "right_bt_"#_sufix;\
|
||||
}\
|
||||
program {\
|
||||
name: "right_bt_"#_sufix"_click2";\
|
||||
signal: "mouse,down,1";\
|
||||
source: "right_bt_"#_sufix"_over3";\
|
||||
action: STATE_SET "clicked" 0.0;\
|
||||
target: "right_bt_"#_sufix"_over3";\
|
||||
}\
|
||||
program {\
|
||||
name: "right_bt_"#_sufix"_unclick2";\
|
||||
signal: "mouse,up,1";\
|
||||
source: "right_bt_"#_sufix"_over3";\
|
||||
action: STATE_SET "default" 0.0;\
|
||||
transition: DECELERATE 0.5;\
|
||||
target: "right_bt_"#_sufix"_over3";\
|
||||
}\
|
||||
program { name: "to_rtl_"#_sufix;\
|
||||
signal: "edje,state,rtl";\
|
||||
source: "edje";\
|
||||
action: STATE_SET "rtl" 0.0;\
|
||||
target: "left_bt_"#_sufix"_icon";\
|
||||
target: "right_bt_"#_sufix"_icon";\
|
||||
}\
|
||||
program { name: "to_ltr_"#_sufix;\
|
||||
signal: "edje,state,ltr";\
|
||||
source: "edje";\
|
||||
action: STATE_SET "default" 0.0;\
|
||||
target: "left_bt_"#_sufix"_icon";\
|
||||
target: "right_bt_"#_sufix"_icon";\
|
||||
}\
|
||||
}
|
||||
|
||||
#define CH(_pos) \
|
||||
part { name: "ch_"#_pos".base"; \
|
||||
type: RECT; \
|
||||
|
@ -363,7 +653,7 @@ group { name: "elm/calendar/base/default";
|
|||
align: 0.0 0.5;
|
||||
}
|
||||
}
|
||||
part { name: "spinner-base";
|
||||
part { name: "spinner-base1";
|
||||
type: RECT;
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
|
@ -372,17 +662,49 @@ group { name: "elm/calendar/base/default";
|
|||
rel1.to: "bg";
|
||||
rel1.offset: 6 6;
|
||||
rel2.to: "bg";
|
||||
rel2.relative: 0.5 1.0;
|
||||
rel2.offset: -7 -7;
|
||||
color: 255 255 255 0;
|
||||
align: 0.0 0.0;
|
||||
}
|
||||
}
|
||||
part { name: "conf_over_spinner";
|
||||
part { name: "conf_over_spinner1";
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
rel1.to: "spinner-base";
|
||||
rel1.to: "spinner-base1";
|
||||
rel1.offset: -3 -3;
|
||||
rel2.to: "spinner-base";
|
||||
rel2.to: "spinner-base1";
|
||||
rel2.offset: 2 2;
|
||||
image {
|
||||
normal: "shelf_inset.png";
|
||||
border: 7 7 7 7;
|
||||
middle: 0;
|
||||
}
|
||||
fill.smooth : 0;
|
||||
}
|
||||
}
|
||||
part { name: "spinner-base2";
|
||||
type: RECT;
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
min: 24 24;
|
||||
max: 999999 24;
|
||||
rel1.to_x: "spinner-base1";
|
||||
rel1.to_y: "bg";
|
||||
rel1.relative: 1.0 0;
|
||||
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_spinner2";
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
rel1.to: "spinner-base2";
|
||||
rel1.offset: -2 -2;
|
||||
rel2.to: "spinner-base2";
|
||||
rel2.offset: 2 2;
|
||||
image {
|
||||
normal: "shelf_inset.png";
|
||||
|
@ -398,7 +720,7 @@ group { name: "elm/calendar/base/default";
|
|||
description { state: "default" 0.0;
|
||||
min: 256 220;
|
||||
rel1.to_x: "bg";
|
||||
rel1.to_y: "spinner-base";
|
||||
rel1.to_y: "spinner-base1";
|
||||
rel1.offset: 6 6;
|
||||
rel1.relative: 0 1;
|
||||
rel2.to: "bg";
|
||||
|
@ -445,200 +767,10 @@ group { name: "elm/calendar/base/default";
|
|||
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";
|
||||
}
|
||||
description { state: "rtl" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
image.normal: "sp_bt_r.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";
|
||||
}
|
||||
description { state: "rtl" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
image.normal: "sp_bt_l.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CAL_SPIN(month, spinner-base1)
|
||||
CAL_SPIN(year, spinner-base2)
|
||||
|
||||
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)
|
||||
|
@ -647,100 +779,6 @@ group { name: "elm/calendar/base/default";
|
|||
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";
|
||||
}
|
||||
program { name: "to_rtl";
|
||||
signal: "edje,state,rtl";
|
||||
source: "edje";
|
||||
action: STATE_SET "rtl" 0.0;
|
||||
target: "right_bt_icon";
|
||||
target: "left_bt_icon";
|
||||
}
|
||||
program { name: "to_ltr";
|
||||
signal: "edje,state,ltr";
|
||||
source: "edje";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "right_bt_icon";
|
||||
target: "left_bt_icon";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#undef CIT
|
||||
|
|
|
@ -136,6 +136,24 @@ _format_month_year(struct tm *selected_time)
|
|||
return strdup(buf);
|
||||
}
|
||||
|
||||
static char *
|
||||
_format_month(struct tm *selected_time)
|
||||
{
|
||||
char buf[32];
|
||||
|
||||
if (!strftime(buf, sizeof(buf), E_("%B"), selected_time)) return NULL;
|
||||
return strdup(buf);
|
||||
}
|
||||
|
||||
static char *
|
||||
_format_year(struct tm *selected_time)
|
||||
{
|
||||
char buf[32];
|
||||
|
||||
if (!strftime(buf, sizeof(buf), E_("%Y"), selected_time)) return NULL;
|
||||
return strdup(buf);
|
||||
}
|
||||
|
||||
static inline void
|
||||
_cit_mark(Evas_Object *cal,
|
||||
int cit,
|
||||
|
@ -187,14 +205,21 @@ _set_month_year(Elm_Calendar_Smart_Data *sd)
|
|||
{
|
||||
char *buf;
|
||||
|
||||
/* Set selected month */
|
||||
buf = sd->format_func(&sd->shown_time);
|
||||
buf = _format_month(&sd->shown_time);
|
||||
if (buf)
|
||||
{
|
||||
elm_layout_text_set(sd->obj, "month_text", buf);
|
||||
elm_layout_text_set(sd->obj, "text_month", buf);
|
||||
free(buf);
|
||||
}
|
||||
else elm_layout_text_set(sd->obj, "month_text", "");
|
||||
else elm_layout_text_set(sd->obj, "text_month", "");
|
||||
|
||||
buf = _format_year(&sd->shown_time);
|
||||
if (buf)
|
||||
{
|
||||
elm_layout_text_set(sd->obj, "text_year", buf);
|
||||
free(buf);
|
||||
}
|
||||
else elm_layout_text_set(sd->obj, "text_year", "");
|
||||
}
|
||||
|
||||
static char *
|
||||
|
@ -255,28 +280,43 @@ _access_calendar_spinner_register(Evas_Object *obj)
|
|||
Elm_Access_Info *ai;
|
||||
ELM_CALENDAR_DATA_GET(obj, sd);
|
||||
|
||||
// decrement button
|
||||
sd->dec_btn_access = _elm_access_edje_object_part_object_register
|
||||
(obj, elm_layout_edje_get(obj), "left_bt");
|
||||
ai = _elm_access_object_get(sd->dec_btn_access);
|
||||
_elm_access_text_set(ai, ELM_ACCESS_TYPE, E_("calendar decrement button"));
|
||||
sd->dec_btn_month_access = _elm_access_edje_object_part_object_register
|
||||
(obj, elm_layout_edje_get(obj), "left_bt_month");
|
||||
ai = _elm_access_object_get(sd->dec_btn_month_access);
|
||||
_elm_access_text_set(ai, ELM_ACCESS_TYPE, E_("calendar decrement month button"));
|
||||
|
||||
// increment button
|
||||
sd->inc_btn_access = _elm_access_edje_object_part_object_register
|
||||
(obj, elm_layout_edje_get(obj), "right_bt");
|
||||
ai = _elm_access_object_get(sd->inc_btn_access);
|
||||
_elm_access_text_set(ai, ELM_ACCESS_TYPE, E_("calendar increment button"));
|
||||
sd->dec_btn_year_access = _elm_access_edje_object_part_object_register
|
||||
(obj, elm_layout_edje_get(obj), "left_bt_year");
|
||||
ai = _elm_access_object_get(sd->dec_btn_year_access);
|
||||
_elm_access_text_set(ai, ELM_ACCESS_TYPE, E_("calendar decrement year button"));
|
||||
|
||||
sd->inc_btn_month_access = _elm_access_edje_object_part_object_register
|
||||
(obj, elm_layout_edje_get(obj), "right_bt_month");
|
||||
ai = _elm_access_object_get(sd->inc_btn_month_access);
|
||||
_elm_access_text_set(ai, ELM_ACCESS_TYPE, E_("calendar increment month button"));
|
||||
|
||||
sd->inc_btn_year_access = _elm_access_edje_object_part_object_register
|
||||
(obj, elm_layout_edje_get(obj), "right_bt_year");
|
||||
ai = _elm_access_object_get(sd->inc_btn_year_access);
|
||||
_elm_access_text_set(ai, ELM_ACCESS_TYPE, E_("calendar increment year button"));
|
||||
|
||||
// month text
|
||||
sd->month_access = _elm_access_edje_object_part_object_register
|
||||
(obj, elm_layout_edje_get(obj), "month_text");
|
||||
(obj, elm_layout_edje_get(obj), "text_month");
|
||||
ai = _elm_access_object_get(sd->month_access);
|
||||
_elm_access_text_set(ai, ELM_ACCESS_TYPE, E_("calendar month"));
|
||||
|
||||
sd->year_access = _elm_access_edje_object_part_object_register
|
||||
(obj, elm_layout_edje_get(obj), "text_year");
|
||||
ai = _elm_access_object_get(sd->year_access);
|
||||
_elm_access_text_set(ai, ELM_ACCESS_TYPE, E_("calendar year"));
|
||||
|
||||
po = (Evas_Object *)edje_object_part_object_get
|
||||
(elm_layout_edje_get(obj), "month_text");
|
||||
(elm_layout_edje_get(obj), "text_month");
|
||||
evas_object_pass_events_set(po, EINA_FALSE);
|
||||
|
||||
po = (Evas_Object *)edje_object_part_object_get
|
||||
(elm_layout_edje_get(obj), "text_year");
|
||||
evas_object_pass_events_set(po, EINA_FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -517,7 +557,7 @@ _fix_selected_time(Elm_Calendar_Smart_Data *sd)
|
|||
}
|
||||
|
||||
static Eina_Bool
|
||||
_update_month(Evas_Object *obj,
|
||||
_update_data(Evas_Object *obj, Eina_Bool month,
|
||||
int delta)
|
||||
{
|
||||
struct tm time_check;
|
||||
|
@ -527,30 +567,40 @@ _update_month(Evas_Object *obj,
|
|||
|
||||
/* check if it's a valid time. for 32 bits, year greater than 2037 is not */
|
||||
time_check = sd->shown_time;
|
||||
time_check.tm_mon += delta;
|
||||
if (month)
|
||||
time_check.tm_mon += delta;
|
||||
else
|
||||
time_check.tm_year += delta;
|
||||
if (mktime(&time_check) == -1)
|
||||
return EINA_FALSE;
|
||||
|
||||
sd->shown_time.tm_mon += delta;
|
||||
if (sd->shown_time.tm_mon < 0)
|
||||
if (month)
|
||||
{
|
||||
if (sd->shown_time.tm_year == sd->year_min)
|
||||
{
|
||||
sd->shown_time.tm_mon++;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
sd->shown_time.tm_mon = 11;
|
||||
sd->shown_time.tm_year--;
|
||||
sd->shown_time.tm_mon += delta;
|
||||
if (sd->shown_time.tm_mon < 0)
|
||||
{
|
||||
if (sd->shown_time.tm_year == sd->year_min)
|
||||
{
|
||||
sd->shown_time.tm_mon++;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
sd->shown_time.tm_mon = 11;
|
||||
sd->shown_time.tm_year--;
|
||||
}
|
||||
else if (sd->shown_time.tm_mon > 11)
|
||||
{
|
||||
if (sd->shown_time.tm_year == sd->year_max)
|
||||
{
|
||||
sd->shown_time.tm_mon--;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
sd->shown_time.tm_mon = 0;
|
||||
sd->shown_time.tm_year++;
|
||||
}
|
||||
}
|
||||
else if (sd->shown_time.tm_mon > 11)
|
||||
else
|
||||
{
|
||||
if (sd->shown_time.tm_year == sd->year_max)
|
||||
{
|
||||
sd->shown_time.tm_mon--;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
sd->shown_time.tm_mon = 0;
|
||||
sd->shown_time.tm_year++;
|
||||
sd->shown_time.tm_year += delta;
|
||||
}
|
||||
|
||||
if ((sd->select_mode != ELM_CALENDAR_SELECT_MODE_ONDEMAND)
|
||||
|
@ -569,21 +619,35 @@ _update_month(Evas_Object *obj,
|
|||
}
|
||||
|
||||
static Eina_Bool
|
||||
_spin_value(void *data)
|
||||
_spin_month_value(void *data)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
if (_update_month(data, sd->spin_speed))
|
||||
if (_update_data(data, EINA_TRUE, sd->spin_speed))
|
||||
evas_object_smart_changed(data);
|
||||
|
||||
sd->interval = sd->interval / 1.05;
|
||||
ecore_timer_interval_set(sd->spin, sd->interval);
|
||||
ecore_timer_interval_set(sd->spin_month, sd->interval);
|
||||
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_spin_year_value(void *data)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
if (_update_data(data, EINA_FALSE, sd->spin_speed))
|
||||
evas_object_smart_changed(data);
|
||||
|
||||
sd->interval = sd->interval / 1.05;
|
||||
ecore_timer_interval_set(sd->spin_year, sd->interval);
|
||||
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
static void
|
||||
_button_inc_start(void *data,
|
||||
_button_month_inc_start(void *data,
|
||||
Evas_Object *obj __UNUSED__,
|
||||
const char *emission __UNUSED__,
|
||||
const char *source __UNUSED__)
|
||||
|
@ -592,14 +656,14 @@ _button_inc_start(void *data,
|
|||
|
||||
sd->interval = sd->first_interval;
|
||||
sd->spin_speed = 1;
|
||||
if (sd->spin) ecore_timer_del(sd->spin);
|
||||
sd->spin = ecore_timer_add(sd->interval, _spin_value, data);
|
||||
if (sd->spin_month) ecore_timer_del(sd->spin_month);
|
||||
sd->spin_month = ecore_timer_add(sd->interval, _spin_month_value, data);
|
||||
|
||||
_spin_value(data);
|
||||
_spin_month_value(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_button_dec_start(void *data,
|
||||
_button_month_dec_start(void *data,
|
||||
Evas_Object *obj __UNUSED__,
|
||||
const char *emission __UNUSED__,
|
||||
const char *source __UNUSED__)
|
||||
|
@ -608,23 +672,68 @@ _button_dec_start(void *data,
|
|||
|
||||
sd->interval = sd->first_interval;
|
||||
sd->spin_speed = -1;
|
||||
if (sd->spin) ecore_timer_del(sd->spin);
|
||||
sd->spin = ecore_timer_add(sd->interval, _spin_value, data);
|
||||
if (sd->spin_month) ecore_timer_del(sd->spin_month);
|
||||
sd->spin_month = ecore_timer_add(sd->interval, _spin_month_value, data);
|
||||
|
||||
_spin_value(data);
|
||||
_spin_month_value(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_button_stop(void *data,
|
||||
Evas_Object *obj __UNUSED__,
|
||||
const char *emission __UNUSED__,
|
||||
const char *source __UNUSED__)
|
||||
_button_month_stop(void *data,
|
||||
Evas_Object *obj __UNUSED__,
|
||||
const char *emission __UNUSED__,
|
||||
const char *source __UNUSED__)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
sd->interval = sd->first_interval;
|
||||
if (sd->spin) ecore_timer_del(sd->spin);
|
||||
sd->spin = NULL;
|
||||
if (sd->spin_month) ecore_timer_del(sd->spin_month);
|
||||
sd->spin_month = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
_button_year_inc_start(void *data,
|
||||
Evas_Object *obj __UNUSED__,
|
||||
const char *emission __UNUSED__,
|
||||
const char *source __UNUSED__)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
sd->interval = sd->first_interval;
|
||||
sd->spin_speed = 1;
|
||||
if (sd->spin_year) ecore_timer_del(sd->spin_year);
|
||||
sd->spin_year = ecore_timer_add(sd->interval, _spin_year_value, data);
|
||||
|
||||
_spin_year_value(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_button_year_dec_start(void *data,
|
||||
Evas_Object *obj __UNUSED__,
|
||||
const char *emission __UNUSED__,
|
||||
const char *source __UNUSED__)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
sd->interval = sd->first_interval;
|
||||
sd->spin_speed = -1;
|
||||
if (sd->spin_year) ecore_timer_del(sd->spin_year);
|
||||
sd->spin_year = ecore_timer_add(sd->interval, _spin_year_value, data);
|
||||
|
||||
_spin_year_value(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_button_year_stop(void *data,
|
||||
Evas_Object *obj __UNUSED__,
|
||||
const char *emission __UNUSED__,
|
||||
const char *source __UNUSED__)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
sd->interval = sd->first_interval;
|
||||
if (sd->spin_year) ecore_timer_del(sd->spin_year);
|
||||
sd->spin_year = NULL;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -735,12 +844,12 @@ _elm_calendar_smart_event(Eo *obj, void *_pd, va_list *list)
|
|||
if ((!strcmp(ev->keyname, "Prior")) ||
|
||||
((!strcmp(ev->keyname, "KP_Prior")) && (!ev->string)))
|
||||
{
|
||||
if (_update_month(obj, -1)) _populate(obj);
|
||||
if (_update_data(obj, EINA_TRUE, -1)) _populate(obj);
|
||||
}
|
||||
else if ((!strcmp(ev->keyname, "Next")) ||
|
||||
((!strcmp(ev->keyname, "KP_Next")) && (!ev->string)))
|
||||
{
|
||||
if (_update_month(obj, 1)) _populate(obj);
|
||||
if (_update_data(obj, EINA_TRUE, 1)) _populate(obj);
|
||||
}
|
||||
else if ((sd->select_mode != ELM_CALENDAR_SELECT_MODE_NONE)
|
||||
&& ((sd->select_mode != ELM_CALENDAR_SELECT_MODE_ONDEMAND)
|
||||
|
@ -819,14 +928,23 @@ _elm_calendar_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
|||
priv->selectable = (~(ELM_CALENDAR_SELECTABLE_NONE));
|
||||
|
||||
edje_object_signal_callback_add
|
||||
(wd->resize_obj, "elm,action,increment,start", "*",
|
||||
_button_inc_start, obj);
|
||||
(wd->resize_obj, "elm,action,increment,month,start", "*",
|
||||
_button_month_inc_start, obj);
|
||||
edje_object_signal_callback_add
|
||||
(wd->resize_obj, "elm,action,decrement,start", "*",
|
||||
_button_dec_start, obj);
|
||||
(wd->resize_obj, "elm,action,decrement,month,start", "*",
|
||||
_button_month_dec_start, obj);
|
||||
edje_object_signal_callback_add
|
||||
(wd->resize_obj, "elm,action,stop", "*",
|
||||
_button_stop, obj);
|
||||
(wd->resize_obj, "elm,action,increment,year,start", "*",
|
||||
_button_year_inc_start, obj);
|
||||
edje_object_signal_callback_add
|
||||
(wd->resize_obj, "elm,action,decrement,year,start", "*",
|
||||
_button_year_dec_start, obj);
|
||||
edje_object_signal_callback_add
|
||||
(wd->resize_obj, "elm,action,month,stop", "*",
|
||||
_button_month_stop, obj);
|
||||
edje_object_signal_callback_add
|
||||
(wd->resize_obj, "elm,action,year,stop", "*",
|
||||
_button_year_stop, obj);
|
||||
edje_object_signal_callback_add
|
||||
(wd->resize_obj, "elm,action,selected", "*",
|
||||
_day_selected, obj);
|
||||
|
@ -875,7 +993,8 @@ _elm_calendar_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
|||
Elm_Calendar_Mark *mark;
|
||||
Elm_Calendar_Smart_Data *sd = _pd;
|
||||
|
||||
if (sd->spin) ecore_timer_del(sd->spin);
|
||||
if (sd->spin_month) ecore_timer_del(sd->spin_month);
|
||||
if (sd->spin_year) ecore_timer_del(sd->spin_year);
|
||||
if (sd->update_timer) ecore_timer_del(sd->update_timer);
|
||||
|
||||
if (sd->marks)
|
||||
|
@ -925,8 +1044,12 @@ _elm_calendar_smart_focus_next(Eo *obj, void *_pd, va_list *list)
|
|||
Elm_Calendar_Smart_Data *sd = _pd;
|
||||
|
||||
items = eina_list_append(items, sd->month_access);
|
||||
items = eina_list_append(items, sd->dec_btn_access);
|
||||
items = eina_list_append(items, sd->inc_btn_access);
|
||||
items = eina_list_append(items, sd->dec_btn_month_access);
|
||||
items = eina_list_append(items, sd->inc_btn_month_access);
|
||||
|
||||
items = eina_list_append(items, sd->year_access);
|
||||
items = eina_list_append(items, sd->dec_btn_year_access);
|
||||
items = eina_list_append(items, sd->inc_btn_year_access);
|
||||
|
||||
day = 0;
|
||||
maxdays = _maxdays_get(&sd->shown_time);
|
||||
|
@ -976,15 +1099,25 @@ _access_obj_process(Evas_Object *obj, Eina_Bool is_access)
|
|||
}
|
||||
}
|
||||
|
||||
if (sd->dec_btn_access)
|
||||
if (sd->dec_btn_month_access)
|
||||
_elm_access_edje_object_part_object_unregister
|
||||
(obj, elm_layout_edje_get(obj), "left_bt");
|
||||
if (sd->inc_btn_access)
|
||||
(obj, elm_layout_edje_get(obj), "left_bt_month");
|
||||
if (sd->inc_btn_month_access)
|
||||
_elm_access_edje_object_part_object_unregister
|
||||
(obj, elm_layout_edje_get(obj), "right_bt");
|
||||
(obj, elm_layout_edje_get(obj), "right_bt_month");
|
||||
if (sd->month_access)
|
||||
_elm_access_edje_object_part_object_unregister
|
||||
(obj, elm_layout_edje_get(obj), "month_text");
|
||||
(obj, elm_layout_edje_get(obj), "text_month");
|
||||
|
||||
if (sd->dec_btn_year_access)
|
||||
_elm_access_edje_object_part_object_unregister
|
||||
(obj, elm_layout_edje_get(obj), "left_bt_year");
|
||||
if (sd->inc_btn_year_access)
|
||||
_elm_access_edje_object_part_object_unregister
|
||||
(obj, elm_layout_edje_get(obj), "right_bt_year");
|
||||
if (sd->year_access)
|
||||
_elm_access_edje_object_part_object_unregister
|
||||
(obj, elm_layout_edje_get(obj), "text_year");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1238,7 +1371,7 @@ _selected_time_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
|||
*ret = EINA_TRUE;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
EINA_DEPRECATED EAPI void
|
||||
elm_calendar_format_function_set(Evas_Object *obj,
|
||||
Elm_Calendar_Format_Cb format_function)
|
||||
{
|
||||
|
@ -1253,7 +1386,6 @@ _format_function_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
|||
Elm_Calendar_Smart_Data *sd = _pd;
|
||||
|
||||
sd->format_func = format_function;
|
||||
_set_month_year(sd);
|
||||
}
|
||||
|
||||
EAPI Elm_Calendar_Mark *
|
||||
|
|
|
@ -640,7 +640,7 @@ EAPI Eina_Bool elm_calendar_selected_time_get(const Evas_Object *obj,
|
|||
*
|
||||
* @ingroup Calendar
|
||||
*/
|
||||
EAPI void elm_calendar_format_function_set(Evas_Object *obj, Elm_Calendar_Format_Cb format_func);
|
||||
EINA_DEPRECATED EAPI void elm_calendar_format_function_set(Evas_Object *obj, Elm_Calendar_Format_Cb format_func);
|
||||
|
||||
/**
|
||||
* Add a new mark to the calendar
|
||||
|
|
|
@ -34,15 +34,18 @@ struct _Elm_Calendar_Smart_Data
|
|||
int year_min, year_max, spin_speed;
|
||||
int today_it, selected_it, first_day_it;
|
||||
Elm_Calendar_Weekday first_week_day;
|
||||
Ecore_Timer *spin, *update_timer;
|
||||
Ecore_Timer *spin_month, *spin_year, *update_timer;
|
||||
Elm_Calendar_Format_Cb format_func;
|
||||
const char *weekdays[ELM_DAY_LAST];
|
||||
struct tm current_time, selected_time, shown_time;
|
||||
Day_Color day_color[42]; // EINA_DEPRECATED
|
||||
Elm_Calendar_Select_Mode select_mode;
|
||||
Evas_Object *inc_btn_access;
|
||||
Evas_Object *dec_btn_access;
|
||||
Evas_Object *inc_btn_month_access;
|
||||
Evas_Object *dec_btn_month_access;
|
||||
Evas_Object *month_access;
|
||||
Evas_Object *inc_btn_year_access;
|
||||
Evas_Object *dec_btn_year_access;
|
||||
Evas_Object *year_access;
|
||||
Eina_Bool selected : 1;
|
||||
Elm_Calendar_Selectable selectable;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue