group { name: "e/modules/clock/digital"; min: 64 16; max: 512 128; images.image: "digit_na.png" COMP; images.image: "digit_0.png" COMP; images.image: "digit_1.png" COMP; images.image: "digit_2.png" COMP; images.image: "digit_3.png" COMP; images.image: "digit_4.png" COMP; images.image: "digit_5.png" COMP; images.image: "digit_6.png" COMP; images.image: "digit_7.png" COMP; images.image: "digit_8.png" COMP; images.image: "digit_9.png" COMP; images.image: "digit_am.png" COMP; images.image: "digit_pm.png" COMP; images.image: "hole_tiny.png" COMP; script { public do_seconds, do_24h, do_date; new tick_timer; valset(id, v) { if ((v >= 0) && (v <= 9)) { new buf[20]; snprintf(buf, 20, "%i", v); set_state(id, buf, 0.0); } else { set_state(id, "default", 0.0); } } apvalset(id, pm) { if (pm) set_state(id, "active", 0.0); else set_state(id, "default", 0.0); } evalsize() { new do24h, dosec, v[14], i, tot, mul; new parts[] = { PART:"hours1", PART:"hours1", PART:"hours2", PART:"hours2", PART:"mins1", PART:"mins1", PART:"mins2", PART:"mins2", PART:"secs1", PART:"secs1", PART:"secs2", PART:"secs2", PART:"ampm", PART:"ampm" }; mul = 4; if (get_int(do_date)) { mul = 3; } for (i = 0; i < 14; i += 2) { custom_state(parts[i], "default", 0.0); } v[0] = 0; v[1] = 2; v[2] = 2; v[3] = 4; // hrs v[4] = 5; v[5] = 7; v[6] = 7; v[7] = 9; // mins tot = 9; dosec = get_int(do_seconds); do24h = get_int(do_24h); if ((dosec) && (!do24h)) { // sec + ampm tot += 7; v[8] = 10; v[9] = 12; v[10] = 12; v[11] = 14; v[12] = 14; v[13] = 16; } else if ((dosec) && (do24h)) { // sec + - tot += 5; v[8] = 10; v[9] = 12; v[10] = 12; v[11] = 14; v[12] = 0; v[13] = 0; } else if ((!dosec) && (!do24h)) { // - + ampm tot += 2; v[8] = 0; v[9] = 0; v[10] = 0; v[11] = 0; v[12] = 9; v[13] = 11; } else if ((!dosec) && (do24h)) { // - + - tot += 0; v[8] = 0; v[9] = 0; v[10] = 0; v[11] = 0; v[12] = 0; v[13] = 0; } for (i = 0; i < 14; i += 2) { set_state_val(parts[i], STATE_REL1, float(v[i]) / float(tot), 0.0); set_state_val(parts[i + 1], STATE_REL2, float(v[i + 1]) / float(tot), 1.0); } for (i = 0; i < 14; i += 2) { set_state(parts[i], "custom", 0.0); } set_min_size(tot * mul, 16); set_max_size(tot * 8 * mul, 128); emit("e,state,sizing,changed", ""); } reset() { new tim; evalsize(); tim = get_int(tick_timer); if (tim) { cancel_timer(tim); set_int(tick_timer, 0); } clock_cb(0); } public clock_cb(val) { new year, month, day, yearday, weekday, hour, minute; new Float:second; new v, dosec, do24h, tim; date(year, month, day, yearday, weekday, hour, minute, second); dosec = get_int(do_seconds); dosec = 1; if (dosec) { v = round(second); tim = timer(1.0 - (second - v), "clock_cb", 1); // set seconds to v valset(PART:"s0", v / 10); valset(PART:"s1", v % 10); } else { tim = timer(60.0 - (second), "clock_cb", 1); } set_int(tick_timer, tim); // set minutes to minute valset(PART:"m0", minute / 10); valset(PART:"m1", minute % 10); // set hours to hour do24h = get_int(do_24h); if (do24h) { valset(PART:"h0", hour / 10); valset(PART:"h1", hour % 10); } else { new pm; // if 12 or later, its pm if (hour >= 12) { pm = 1; // if we are after 12 (1, 2, 3 etc.) then mod by 12 if (hour > 12) hour = hour % 12; } else { pm = 0; // make after midnight be 12:XX AM :) if (hour == 0) hour = 12; } valset(PART:"h0", hour / 10); valset(PART:"h1", hour % 10); apvalset(PART:"ap", pm); } } } parts { part { name: "secclip"; type: RECT; description { state: "default" 0.0; } description { state: "hidden" 0.0; visible: 0; } } part { name: "ampmclip"; type: RECT; description { state: "default" 0.0; } description { state: "hidden" 0.0; visible: 0; } } // XXX: hours1/2, mins1/2, secs1/2 and ampm SHOULD be spacers... but // if they are calculations go weird. this shouldnt happen, but does. part { name: "timearea"; type: RECT; description { state: "default" 0.0; visible: 0; } description { state: "date" 0.0; inherit: "default" 0.0; rel2.relative: 1.0 0.0; rel2.offset: -1 4; rel2.to_y: "e.text.today"; } } part { name: "hours1"; type: RECT; description { state: "default" 0.0; rel1.relative: (0/16) 0.0; rel2.relative: (2/16) 1.0; rel1.to: "timearea"; rel2.to: "timearea"; visible: 0; } } part { name: "hours2"; type: RECT; description { state: "default" 0.0; rel1.relative: (2/16) 0.0; rel2.relative: (4/16) 1.0; rel1.to: "timearea"; rel2.to: "timearea"; visible: 0; } } part { name: "mins1"; type: RECT; description { state: "default" 0.0; rel1.relative: (5/16) 0.0; rel2.relative: (7/16) 1.0; rel1.to: "timearea"; rel2.to: "timearea"; visible: 0; } } part { name: "mins2"; type: RECT; description { state: "default" 0.0; rel1.relative: (7/16) 0.0; rel2.relative: (9/16) 1.0; rel1.to: "timearea"; rel2.to: "timearea"; visible: 0; } } part { name: "secs1"; type: RECT; description { state: "default" 0.0; rel1.relative: (10/16) 0.0; rel2.relative: (12/16) 1.0; rel1.to: "timearea"; rel2.to: "timearea"; visible: 0; } } part { name: "secs2"; type: RECT; description { state: "default" 0.0; rel1.relative: (12/16) 0.0; rel2.relative: (14/16) 1.0; rel1.to: "timearea"; rel2.to: "timearea"; visible: 0; } } part { name: "ampm"; type: RECT; description { state: "default" 0.0; rel1.relative: (14/16) 0.0; rel2.relative: (16/16) 1.0; rel1.to: "timearea"; rel2.to: "timearea"; visible: 0; } } part { name: "c00"; description { state: "default" 0.0; rel1.to: "hours2"; rel1.relative: 1.0 0.5; rel1.offset: 0 -2; rel2.to: "mins1"; rel2.relative: 0.0 0.5; rel2.offset: 0 -2; align: 0.5 1.0; FIXED_SIZE(4, 4) image.normal: "hole_tiny.png"; } } part { name: "c01"; description { state: "default" 0.0; rel1.to: "hours2"; rel1.relative: 1.0 0.5; rel1.offset: 0 1; rel2.to: "mins1"; rel2.relative: 0.0 0.5; rel2.offset: 0 1; align: 0.5 0.0; FIXED_SIZE(4, 4) image.normal: "hole_tiny.png"; } } part { name: "c10"; clip_to: "secclip"; description { state: "default" 0.0; rel1.to: "mins2"; rel1.relative: 1.0 0.5; rel1.offset: 0 -2; rel2.to: "secs1"; rel2.relative: 0.0 0.5; rel2.offset: 0 -2; align: 0.5 1.0; FIXED_SIZE(4, 4) image.normal: "hole_tiny.png"; } } part { name: "c11"; clip_to: "secclip"; description { state: "default" 0.0; rel1.to: "mins2"; rel1.relative: 1.0 0.5; rel1.offset: 0 1; rel2.to: "secs1"; rel2.relative: 0.0 0.5; rel2.offset: 0 1; align: 0.5 0.0; FIXED_SIZE(4, 4) image.normal: "hole_tiny.png"; } } #define DIGIT(_NAME, _TO) \ part { name: _NAME; \ description { state: "default" 0.0; \ rel1.to: _TO; rel2.to: _TO; \ aspect: (52/72) (52/72); aspect_preference: BOTH; \ image.normal: "digit_na.png"; \ } \ description { state: "0" 0.0; inherit: "default" 0.0; image.normal: "digit_0.png"; } \ description { state: "1" 0.0; inherit: "default" 0.0; image.normal: "digit_1.png"; } \ description { state: "2" 0.0; inherit: "default" 0.0; image.normal: "digit_2.png"; } \ description { state: "3" 0.0; inherit: "default" 0.0; image.normal: "digit_3.png"; } \ description { state: "4" 0.0; inherit: "default" 0.0; image.normal: "digit_4.png"; } \ description { state: "5" 0.0; inherit: "default" 0.0; image.normal: "digit_5.png"; } \ description { state: "6" 0.0; inherit: "default" 0.0; image.normal: "digit_6.png"; } \ description { state: "7" 0.0; inherit: "default" 0.0; image.normal: "digit_7.png"; } \ description { state: "8" 0.0; inherit: "default" 0.0; image.normal: "digit_8.png"; } \ description { state: "9" 0.0; inherit: "default" 0.0; image.normal: "digit_9.png"; } \ } #define DIGITC(_NAME, _TO, _CLIP) \ part { name: _NAME; \ clip_to: _CLIP; \ description { state: "default" 0.0; \ rel1.to: _TO; rel2.to: _TO; \ aspect: (52/72) (52/72); aspect_preference: BOTH; \ image.normal: "digit_na.png"; \ } \ description { state: "0" 0.0; inherit: "default" 0.0; image.normal: "digit_0.png"; } \ description { state: "1" 0.0; inherit: "default" 0.0; image.normal: "digit_1.png"; } \ description { state: "2" 0.0; inherit: "default" 0.0; image.normal: "digit_2.png"; } \ description { state: "3" 0.0; inherit: "default" 0.0; image.normal: "digit_3.png"; } \ description { state: "4" 0.0; inherit: "default" 0.0; image.normal: "digit_4.png"; } \ description { state: "5" 0.0; inherit: "default" 0.0; image.normal: "digit_5.png"; } \ description { state: "6" 0.0; inherit: "default" 0.0; image.normal: "digit_6.png"; } \ description { state: "7" 0.0; inherit: "default" 0.0; image.normal: "digit_7.png"; } \ description { state: "8" 0.0; inherit: "default" 0.0; image.normal: "digit_8.png"; } \ description { state: "9" 0.0; inherit: "default" 0.0; image.normal: "digit_9.png"; } \ } #define TAG(_NAME, _TO, _CLIP) \ part { name: _NAME; \ clip_to: _CLIP; \ description { state: "default" 0.0; \ rel1.to: _TO; rel2.to: _TO; \ aspect: (48/31) (48/31); aspect_preference: BOTH; \ image.normal: "digit_am.png"; \ } \ description { state: "active" 0.0; \ inherit: "default" 0.0; \ image.normal: "digit_pm.png"; \ } \ } DIGIT ("h0", "hours1") DIGIT ("h1", "hours2") DIGIT ("m0", "mins1") DIGIT ("m1", "mins2") DIGITC("s0", "secs1", "secclip") DIGITC("s1", "secs2", "secclip") TAG("ap", "ampm", "ampmclip") #undef TAG #undef DIGIT part { name: "e.text.today"; type: TEXT; effect: GLOW; description { state: "default" 0.0; rel1.relative: 0.0 1.0; rel1.offset: 0 1; rel2.offset: -1 1; align: 0.5 1.0; color: 51 153 255 255; color2: 51 153 255 24; color3: 51 153 255 18; text { font: "Sans"; size: 8; text_class: "module_small"; align: 0.5 0.5; min: 0 1; } fixed: 0 1; } } part { name: "event"; type: RECT; description { state: "default" 0.0; color: 0 0 0 0; } } } programs { program { signal: "load"; source: ""; script { clock_cb(0); } } program { signal: "e,state,date,on"; source: "e"; script { set_int(do_date, 1); set_state(PART:"timearea", "date", 0.0); reset(); } } program { signal: "e,state,date,off"; source: "e"; script { set_int(do_date, 0); set_state(PART:"timearea", "default", 0.0); reset(); } } program { signal: "e,state,seconds,on"; source: "e"; script { set_int(do_seconds, 1); set_state(PART:"secclip", "default", 0.0); reset(); } } program { signal: "e,state,seconds,off"; source: "e"; script { set_int(do_seconds, 0); set_state(PART:"secclip", "hidden", 0.0); reset(); } } program { signal: "e,state,24h,on"; source: "e"; script { set_int(do_24h, 1); set_state(PART:"ampmclip", "hidden", 0.0); reset(); } } program { signal: "e,state,24h,off"; source: "e"; script { set_int(do_24h, 0); set_state(PART:"ampmclip", "default", 0.0); reset(); } } } } group { name: "e/modules/clock/main"; images { image: "hole_tiny.png" COMP; image: "hole_pixel.png" COMP; #define SET(_NAME) \ set { name: _NAME; \ image { image: _NAME".png" COMP; size: 26 83 99999 99999; } \ image { image: _NAME"2.png" COMP; size: 23 71 26 82; } \ image { image: _NAME"3.png" COMP; size: 19 58 22 70; } \ image { image: _NAME"4.png" COMP; size: 15 45 18 57; } \ image { image: _NAME"5.png" COMP; size: 11 33 14 44; } \ image { image: _NAME"6.png" COMP; size: 7 20 10 32; } \ image { image: _NAME"7.png" COMP; size: 0 0 6 19; } \ } SET("clock_h") SET("clock_hs") SET("clock_m") SET("clock_ms") SET("clock_s") SET("clock_ss") #undef SET set { name: "knob"; image { image: "knob_sz_24.png" COMP; size: 31 31 32 32; } image { image: "knob_sz_22.png" COMP; size: 29 29 30 30; } image { image: "knob_sz_20.png" COMP; size: 27 27 28 28; } image { image: "knob_sz_18.png" COMP; size: 25 25 26 26; } image { image: "knob_sz_16.png" COMP; size: 23 23 24 24; } image { image: "knob_sz_14.png" COMP; size: 21 21 22 22; } image { image: "knob_sz_12.png" COMP; size: 19 19 20 20; } image { image: "knob_sz_10.png" COMP; size: 17 17 18 18; } image { image: "knob_sz_08.png" COMP; size: 15 15 16 16; } image { image: "knob_sz_06.png" COMP; size: 13 13 14 14; } image { image: "knob_sz_04.png" COMP; size: 0 0 12 12; } } } min: 16 16; max: 160 160; script { public do_seconds, tick_timer; public clock_cb(val) { new year, month, day, yearday, weekday, hour, minute; new Float:second; new v, dosec, tim; date(year, month, day, yearday, weekday, hour, minute, second); dosec = get_int(do_seconds); if (dosec) { v = round(second); tim = timer(1.0 - (second - v), "clock_cb", 1); custom_state(PART:"seconds", "default", 0.0); set_state_val(PART:"seconds", STATE_MAP_ROT_Z, (v * 360.0) / 60.0); set_state(PART:"seconds", "custom", 0.0); custom_state(PART:"seconds-sh", "default", 0.0); set_state_val(PART:"seconds-sh", STATE_MAP_ROT_Z, (v * 360.0) / 60.0); set_state(PART:"seconds-sh", "custom", 0.0); } else { tim = timer(60.0 - (second), "clock_cb", 1); } set_int(tick_timer, tim); custom_state(PART:"minutes", "default", 0.0); set_state_val(PART:"minutes", STATE_MAP_ROT_Z, (float(minute) * 360.0) / 60.0); set_state(PART:"minutes", "custom", 0.0); custom_state(PART:"minutes-sh", "default", 0.0); set_state_val(PART:"minutes-sh", STATE_MAP_ROT_Z, (float(minute) * 360.0) / 60.0); set_state(PART:"minutes-sh", "custom", 0.0); custom_state(PART:"hours", "default", 0.0); set_state_val(PART:"hours", STATE_MAP_ROT_Z, ((float(hour) + (float(minute) / 60.0)) * 360.0) / 12.0); set_state(PART:"hours", "custom", 0.0); custom_state(PART:"hours-sh", "default", 0.0); set_state_val(PART:"hours-sh", STATE_MAP_ROT_Z, ((float(hour) + (float(minute) / 60.0)) * 360.0) / 12.0); set_state(PART:"hours-sh", "custom", 0.0); } } parts { part { name: "event"; type: RECT; description { state: "default" 0.0; color: 0 0 0 0; } } part { name: "base"; type: SPACER; description { state: "default" 0.0; rel1.offset: -1 -1; rel2.offset: 0 0; aspect: 1.0 1.0; } } part { name: "base-sh"; type: SPACER; description { state: "default" 0.0; rel1.offset: 0 1; rel1.to: "base"; rel2.offset: -1 0; rel2.to: "base"; } } #define POINT(_NAME, _SZ, _IMG, _X, _Y) \ part { name: _NAME; \ description { state: "default" 0.0; \ rel1.relative: _X _Y; \ rel1.to: "base"; \ rel2.relative: _X _Y; \ rel2.to: "base"; \ min: _SZ _SZ; \ max: _SZ _SZ; \ fixed: 1 1; \ image.normal: "hole_"_IMG".png"; \ } \ } POINT("h-12", 4, "tiny", 0.500, 0.100) POINT("h-01", 3, "pixel", 0.700, 0.154) POINT("h-02", 3, "pixel", 0.846, 0.300) POINT("h-03", 4, "tiny", 0.900, 0.500) POINT("h-04", 3, "pixel", 0.846, 0.700) POINT("h-05", 3, "pixel", 0.700, 0.846) POINT("h-06", 4, "tiny", 0.500, 0.900) POINT("h-07", 3, "pixel", 0.300, 0.846) POINT("h-08", 3, "pixel", 0.154, 0.700) POINT("h-09", 4, "tiny", 0.100, 0.500) POINT("h-10", 3, "pixel", 0.154, 0.300) POINT("h-11", 3, "pixel", 0.300, 0.154) #undef POINT #define HAND(_NAME, _IMG) \ part { name: _NAME"-sh"; mouse_events: 0; \ description { state: "default" 0.0; \ rel1.to: "base-sh"; \ rel1.relative: (65/160) 0; \ rel2.to: "base-sh"; \ rel2.relative: (95/160) (95/160); \ image.normal: _IMG"s"; \ map.on: 1; \ map.rotation.center: "base-sh"; \ color: 255 255 255 128; \ } \ description { state: "hidden" 0.0; \ inherit: "default" 0.0; \ visible: 0; \ } \ } \ part { name: _NAME; mouse_events: 0; \ description { state: "default" 0.0; \ rel1.to: "base"; \ rel1.relative: (65/160) 0; \ rel2.to: "base"; \ rel2.relative: (95/160) (95/160); \ image.normal: _IMG; \ map.on: 1; \ map.rotation.center: "base"; \ } \ description { state: "hidden" 0.0; \ inherit: "default" 0.0; \ visible: 0; \ } \ } HAND("seconds", "clock_s") HAND("minutes", "clock_m") HAND("hours", "clock_h") #undef HAND part { name: "knob"; type: SPACER; description { state: "default" 0.0; rel1.relative: (18/40) (18/40); rel1.to: "base"; rel2.relative: (22/40) (22/40); rel2.to: "base"; min: 4 4; step: 2 2; max: 24 24; } } part { name: "knob2"; description { state: "default" 0.0; rel1.offset: -4 -4; rel1.to: "knob"; rel2.offset: 3 3; rel2.to: "knob"; min: 12 12; max: 32 32; image.normal: "knob"; } } } programs { program { signal: "load"; source: ""; script { clock_cb(0); } } program { signal: "e,state,seconds,on"; source: "e"; action: STATE_SET "default" 0.0; target: "seconds"; target: "seconds-sh"; after: "sec2"; } program { name: "sec2"; script { new tim; set_int(do_seconds, 1); tim = get_int(tick_timer); if (tim) { cancel_timer(tim); set_int(tick_timer, 0); } clock_cb(0); } } program { signal: "e,state,seconds,off"; source: "e"; action: STATE_SET "hidden" 0.0; target: "seconds"; target: "seconds-sh"; after: "sec3"; } program { name: "sec3"; script { new tim; set_int(do_seconds, 0); tim = get_int(tick_timer); if (tim) { cancel_timer(tim); set_int(tick_timer, 0); } clock_cb(0); } } } } group { name: "e/modules/clock/calendar/dayname"; parts { part { name: "e.text.label"; type: TEXT; mouse_events: 0; effect: SHADOW BOTTOM; scale: 1; description { state: "default" 0.0; color: 21 21 21 255; color3: 255 255 255 25; text { font: "Sans"; size: 8; min: 1 1; align: 0.5 0.5; text_class: "module_small"; } } description { state: "weekend" 0.0; inherit: "default" 0.0; color: 48 48 48 255; } } } programs { program { signal: "e,state,weekend"; source: "e"; action: STATE_SET "weekend" 0.0; target: "e.text.label"; } program { signal: "e,state,weekday"; source: "e"; action: STATE_SET "default" 0.0; target: "e.text.label"; } } } group { name: "e/modules/clock/calendar/day"; script { public day_state = 0; evalstate() { new vv = get_int(day_state); if (vv & 2) { set_state(PART:"e.text.label", "today", 0.0); set_state(PART:"label2", "today", 0.0); } else if (vv & 4) { set_state(PART:"e.text.label", "hidden", 0.0); set_state(PART:"label2", "default", 0.0); } else if (vv & 1) { set_state(PART:"e.text.label", "weekend", 0.0); set_state(PART:"label2", "default", 0.0); } else { set_state(PART:"e.text.label", "default", 0.0); set_state(PART:"label2", "default", 0.0); } } } parts { part { name: "e.text.label"; type: TEXT; mouse_events: 0; effect: SHADOW BOTTOM; scale: 1; description { state: "default" 0.0; color: 255 255 255 255; color3: 0 0 0 128; text { font: "Sans"; size: 10; min: 1 1; align: 0.5 0.5; } } description { state: "today" 0.0; inherit: "default" 0.0; visible: 0; } description { state: "weekend" 0.0; inherit: "default" 0.0; color: 128 128 128 255; } description { state: "hidden" 0.0; inherit: "default" 0.0; color: 21 21 21 255; color3: 255 255 255 25; } } part { name: "label2"; type: TEXT; mouse_events: 0; effect: GLOW; scale: 1; description { state: "default" 0.0; rel1.offset: -3 -3; rel1.to: "e.text.label"; rel2.offset: 2 1; rel2.to: "e.text.label"; color: 51 153 255 255; color2: 51 153 255 24; color3: 51 153 255 18; text { font: "Sans"; size: 10; text_source: "e.text.label"; min: 1 1; align: 0.5 0.5; } visible: 0; } description { state: "today" 0.0; inherit: "default" 0.0; visible: 1; } } } programs { program { signal: "e,state,weekend"; source: "e"; script { new vv = get_int(day_state); set_int(day_state, vv | 1); evalstate(); } } program { signal: "e,state,weekday"; source: "e"; script { new vv = get_int(day_state); set_int(day_state, vv & (~1)); evalstate(); } } program { signal: "e,state,today"; source: "e"; script { new vv = get_int(day_state); set_int(day_state, vv | 2); evalstate(); } } program { signal: "e,state,someday"; source: "e"; script { new vv = get_int(day_state); set_int(day_state, vv & (~2)); evalstate(); } } program { signal: "e,state,hidden"; source: "e"; script { new vv = get_int(day_state); set_int(day_state, vv | 4); evalstate(); } } program { signal: "e,state,visible"; source: "e"; script { new vv = get_int(day_state); set_int(day_state, vv & (~4)); evalstate(); } } } } group { name: "e/modules/clock/calendar"; images.image: "separator_horiz.png" COMP; images.image: "sym_left_light_normal.png" COMP; images.image: "sym_right_light_normal.png" COMP; images.image: "sym_left_glow_normal.png" COMP; images.image: "sym_right_glow_normal.png" COMP; parts { part { name: "e.text.month"; type: TEXT; effect: SHADOW BOTTOM; mouse_events: 1; scale: 1; description { state: "default" 0.0; fixed: 0 1; align: 0.0 0.0; rel1.to_x: "prev"; rel1.relative: 1.0 0.0; rel2.relative: 1.0 0.0; color: 255 255 255 255; color3: 0 0 0 128; text { font: "Sans:style=Bold"; size: 10; align: 0.0 0.5; min: 0 1; text_class: "module_normal"; } } } part { name: "e.text.year"; type: TEXT; mouse_events: 0; effect: SHADOW BOTTOM; scale: 1; description { state: "default" 0.0; fixed: 0 1; align: 1.0 0.0; rel1.relative: 0.0 0.0; rel2.to_x: "next"; rel2.relative: 0.0 0.0; color: 255 255 255 255; color3: 0 0 0 128; text { font: "Sans:style=Bold"; size: 10; align: 1.0 0.5; min: 0 1; text_class: "module_normal"; } } } part { name: "previm"; mouse_events: 0; description { state: "default" 0.0; min: 15 15; max: 15 15; rel1.to: "prev"; rel2.to: "prev"; image.normal: "sym_left_light_normal.png"; } description { state: "pressed" 0.0; inherit: "default" 0.0; image.normal: "sym_left_glow_normal.png"; } } part { name: "prev"; type: RECT; description { state: "default" 0.0; align: 0.0 0.5; color: 0 0 0 0; aspect: 1.0 1.0; aspect_preference: VERTICAL; rel1.to_y: "e.text.month"; rel1.relative: 0.0 0.0; rel2.to_y: "e.text.month"; rel2.relative: 0.0 1.0; } program { name: "prev_down"; signal: "mouse,down,1*"; source: "prev"; action: STATE_SET "pressed" 0.0; target: "previm"; } program { name: "prev_up"; signal: "mouse,up,1"; source: "prev"; action: STATE_SET "default" 0.0; target: "previm"; } program { name: "prev_clicked"; signal: "mouse,clicked,1*"; source: "prev"; action: SIGNAL_EMIT "e,action,prev" ""; } } part { name: "nextim"; mouse_events: 0; description { state: "default" 0.0; min: 15 15; max: 15 15; rel1.to: "next"; rel2.to: "next"; image.normal: "sym_right_light_normal.png"; } description { state: "pressed" 0.0; inherit: "default" 0.0; image.normal: "sym_right_glow_normal.png"; } } part { name: "next"; type: RECT; description { state: "default" 0.0; align: 1.0 0.5; color: 0 0 0 0; aspect: 1.0 1.0; aspect_preference: VERTICAL; rel1.to_y: "e.text.month"; rel1.relative: 1.0 0.0; rel2.to_y: "e.text.month"; rel2.relative: 1.0 1.0; } program { name: "next_down"; signal: "mouse,down,1"; source: "next"; action: STATE_SET "pressed" 0.0; target: "nextim"; } program { name: "next_up"; signal: "mouse,up,1"; source: "next"; action: STATE_SET "default" 0.0; target: "nextim"; } program { name: "next_clicked"; signal: "mouse,clicked,1"; source: "next"; action: SIGNAL_EMIT "e,action,next" ""; } } part { name: "sel"; description { state: "default" 0.0; image.normal: "separator_horiz.png"; rel1.relative: 0.0 1.0; rel1.offset: 0 0; rel1.to: "e.table.daynames"; rel2.offset: -1 1; rel2.to: "e.table.daynames"; min: 0 2; fill.smooth: 0; } } part { name: "e.table.daynames"; type: TABLE; description { state: "default" 0.0; fixed: 0 1; align: 0.5 0.0; rel1.to_y: "e.text.month"; rel1.relative: 0.0 1.0; rel1.offset: 2 2; rel2.to_y: "e.text.month"; rel2.relative: 1.0 1.0; rel2.offset: -3 2; step: 7 1; table { homogeneous: TABLE; padding: 1 1; align: 0.5 0.5; min: 1 1; } } table { items { #define D(x) \ item { \ position: x 0; \ span: 1 1; \ source: "e/modules/clock/calendar/dayname"; \ weight: 1.0 1.0; \ align: -1.0 -1.0; \ } D(0) D(1) D(2) D(3) D(4) D(5) D(6) #undef D } } } part { name: "e.table.days"; type: TABLE; description { state: "default" 0.0; rel1.to_y: "e.table.daynames"; rel1.relative: 0.0 1.0; rel1.offset: 2 2; rel2.offset: -3 -3; step: 7 5; table { homogeneous: TABLE; padding: 1 1; align: 0.5 0.5; min: 1 1; } } table { items { #define D(x, y) \ item { \ position: x y; \ span: 1 1; \ source: "e/modules/clock/calendar/day"; \ weight: 1.0 1.0; \ align: -1.0 -1.0; \ } D(0, 0) D(1, 0) D(2, 0) D(3, 0) D(4, 0) D(5, 0) D(6, 0) D(0, 1) D(1, 1) D(2, 1) D(3, 1) D(4, 1) D(5, 1) D(6, 1) D(0, 2) D(1, 2) D(2, 2) D(3, 2) D(4, 2) D(5, 2) D(6, 2) D(0, 3) D(1, 3) D(2, 3) D(3, 3) D(4, 3) D(5, 3) D(6, 3) D(0, 4) D(1, 4) D(2, 4) D(3, 4) D(4, 4) D(5, 4) D(6, 4) D(0, 5) D(1, 5) D(2, 5) D(3, 5) D(4, 5) D(5, 5) D(6, 5) #undef D } } } } }