This looks good but isn't this be a theme api break? Elementary was already released. Maybe this needs to be optional?
Daniel Juyung Seo (SeoZ) On Fri, Jan 4, 2013 at 5:50 AM, Enlightenment SVN < [email protected]> wrote: > Log: > [elm] calendar: spinners for month and year now > > Adding a separated spinner for year. > > > > Author: ceolin > Date: 2013-01-03 12:50:10 -0800 (Thu, 03 Jan 2013) > New Revision: 82108 > Trac: http://trac.enlightenment.org/e/changeset/82108 > > Modified: > trunk/elementary/data/themes/widgets/calendar.edc > trunk/elementary/src/lib/elm_calendar.c > trunk/elementary/src/lib/elm_calendar.h > trunk/elementary/src/lib/elm_widget_calendar.h > > Modified: trunk/elementary/data/themes/widgets/calendar.edc > =================================================================== > --- trunk/elementary/data/themes/widgets/calendar.edc 2013-01-03 > 20:48:52 UTC (rev 82107) > +++ trunk/elementary/data/themes/widgets/calendar.edc 2013-01-03 > 20:50:10 UTC (rev 82108) > @@ -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 @@ > 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,18 @@ > 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"; > @@ -392,13 +683,44 @@ > 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"; > + 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.to_y: "spinner-base1"; > rel1.offset: 6 6; > rel1.relative: 0 1; > rel2.to: "bg"; > @@ -445,200 +767,10 @@ > 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 @@ > 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 > > Modified: trunk/elementary/src/lib/elm_calendar.c > =================================================================== > --- trunk/elementary/src/lib/elm_calendar.c 2013-01-03 20:48:52 UTC > (rev 82107) > +++ trunk/elementary/src/lib/elm_calendar.c 2013-01-03 20:50:10 UTC > (rev 82108) > @@ -136,6 +136,24 @@ > 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 @@ > { > 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 @@ > 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")); > > - // month text > + 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")); > + > 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 @@ > } > > 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 @@ > > /* 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 @@ > } > > 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 @@ > > 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,25 +672,70 @@ > > 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 > _get_item_day(Evas_Object *obj, > int selected_it) > @@ -735,12 +844,12 @@ > 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,15 +928,24 @@ > 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_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,9 +1044,13 @@ > 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); > for (i = 0; i < 42; i++) > @@ -976,15 +1099,25 @@ > } > } > > - 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 @@ > *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 @@ > Elm_Calendar_Smart_Data *sd = _pd; > > sd->format_func = format_function; > - _set_month_year(sd); > } > > EAPI Elm_Calendar_Mark * > > Modified: trunk/elementary/src/lib/elm_calendar.h > =================================================================== > --- trunk/elementary/src/lib/elm_calendar.h 2013-01-03 20:48:52 UTC > (rev 82107) > +++ trunk/elementary/src/lib/elm_calendar.h 2013-01-03 20:50:10 UTC > (rev 82108) > @@ -640,7 +640,7 @@ > * > * @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 > > Modified: trunk/elementary/src/lib/elm_widget_calendar.h > =================================================================== > --- trunk/elementary/src/lib/elm_widget_calendar.h 2013-01-03 > 20:48:52 UTC (rev 82107) > +++ trunk/elementary/src/lib/elm_widget_calendar.h 2013-01-03 > 20:50:10 UTC (rev 82108) > @@ -34,15 +34,18 @@ > 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; > }; > > > > ------------------------------------------------------------------------------ > Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, > MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current > with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft > MVPs and experts. ON SALE this month only -- learn more at: > http://p.sf.net/sfu/learnmore_122712 > _______________________________________________ > enlightenment-svn mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/enlightenment-svn > ------------------------------------------------------------------------------ Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft MVPs and experts. SALE $99.99 this month only -- learn more at: http://p.sf.net/sfu/learnmore_122912 _______________________________________________ enlightenment-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
