group { name: "e/modules/clock/digital"; min: 64 16; max: 512 128; images.image: "digit_na.png" COMP; images.image: "digit_nm.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, tick_timer; 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); } valset(name[], v) { new buf[20], i; for (i = 0; i < 10; i++) { if (i == v) { snprintf(buf, 20, "show,%s-%i", name, i); } else { snprintf(buf, 20, "hide,%s-%i", name, i); } emit(buf, "c"); } } apvalset(id, pm) { if (pm) set_state(id, "active", 0.0); else set_state(id, "default", 0.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); if (dosec) { v = round(second); tim = timer(1.0 - (second - v), "clock_cb", 1); // set seconds to v valset("s0", v / 10); valset("s1", v % 10); } else { tim = timer(60.0 - (second), "clock_cb", 1); } set_int(tick_timer, tim); // set minutes to minute valset("m0", minute / 10); valset("m1", minute % 10); // set hours to hour do24h = get_int(do_24h); if (do24h) { valset("h0", hour / 10); valset("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("h0", hour / 10); valset("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 ELEM(_NAME, _TO, _DIGIT) \ 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_"_DIGIT".png"; \ visible: 0; \ color: 255 255 255 0; \ } \ description { state: "active" 0.0; \ inherit: "default" 0.0; \ visible: 1; \ color: 255 255 255 255; \ } \ } #define DIGIT(_NAME, _TO) \ ELEM(_NAME"-0", _TO, "0") \ ELEM(_NAME"-1", _TO, "1") \ ELEM(_NAME"-2", _TO, "2") \ ELEM(_NAME"-3", _TO, "3") \ ELEM(_NAME"-4", _TO, "4") \ ELEM(_NAME"-5", _TO, "5") \ ELEM(_NAME"-6", _TO, "6") \ ELEM(_NAME"-7", _TO, "7") \ ELEM(_NAME"-8", _TO, "8") \ ELEM(_NAME"-9", _TO, "9") #define ELEMC(_NAME, _TO, _DIGIT, _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_"_DIGIT".png"; \ visible: 0; \ color: 255 255 255 0; \ } \ description { state: "active" 0.0; \ inherit: "default" 0.0; \ visible: 1; \ color: 255 255 255 255; \ } \ } #define DIGITC(_NAME, _TO, _CLIP) \ ELEMC(_NAME"-0", _TO, "0", _CLIP) \ ELEMC(_NAME"-1", _TO, "1", _CLIP) \ ELEMC(_NAME"-2", _TO, "2", _CLIP) \ ELEMC(_NAME"-3", _TO, "3", _CLIP) \ ELEMC(_NAME"-4", _TO, "4", _CLIP) \ ELEMC(_NAME"-5", _TO, "5", _CLIP) \ ELEMC(_NAME"-6", _TO, "6", _CLIP) \ ELEMC(_NAME"-7", _TO, "7", _CLIP) \ ELEMC(_NAME"-8", _TO, "8", _CLIP) \ ELEMC(_NAME"-9", _TO, "9", _CLIP) #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"; \ } \ } #define BASE(_NAME, _BASE, _IMG) \ part { name: _NAME; \ description { state: "default" 0.0; \ rel1.to: _BASE; \ rel2.to: _BASE; \ image.normal: _IMG; \ color: 255 255 255 128; \ } \ } #define BASEC(_NAME, _CLIP, _BASE, _IMG) \ part { name: _NAME; \ clip_to: _CLIP; \ description { state: "default" 0.0; \ rel1.to: _BASE; \ rel2.to: _BASE; \ image.normal: _IMG; \ color: 255 255 255 128; \ } \ } BASE ("ha", "h0-0", "digit_na.png") BASE ("hb", "h1-0", "digit_na.png") BASE ("ma", "m0-0", "digit_na.png") BASE ("mb", "m1-0", "digit_na.png") BASEC("sa", "secclip", "s0-0", "digit_na.png") BASEC("sb", "secclip", "s1-0", "digit_na.png") BASEC("aa", "ampmclip", "ap", "digit_nm.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 TAG #undef ELEM #undef ELEMC #undef BASE #undef BASEC #undef DIGIT #undef DIGITC part { name: "e.text.today"; type: TEXT; effect: GLOW; scale: 1; 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; visible: 0; } description { state: "date" 0.0; inherit: "default" 0.0; visible: 1; fixed: 1 1; } } part { name: "event"; type: RECT; description { state: "default" 0.0; color: 0 0 0 0; } } } programs { program { signal: "load"; source: ""; script { reset(); } } program { signal: "e,state,date,on"; source: "e"; script { set_int(do_date, 1); set_state(PART:"timearea", "date", 0.0); set_state(PART:"e.text.today", "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); set_state(PART:"e.text.today", "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(); } } #define DIGPRG(_NAME) \ program { \ signal: "show,"_NAME; source: "c"; \ action: STATE_SET "active" 0.0; \ transition: BOUNCE 0.3 0.5 2; \ target: _NAME; \ } \ program { \ signal: "hide,"_NAME; source: "c"; \ action: STATE_SET "default" 0.0; \ transition: DECELERATE 0.3; \ target: _NAME; \ } #define DIGPRGS(_NAME) \ DIGPRG(_NAME"-0") \ DIGPRG(_NAME"-1") \ DIGPRG(_NAME"-2") \ DIGPRG(_NAME"-3") \ DIGPRG(_NAME"-4") \ DIGPRG(_NAME"-5") \ DIGPRG(_NAME"-6") \ DIGPRG(_NAME"-7") \ DIGPRG(_NAME"-8") \ DIGPRG(_NAME"-9") DIGPRGS("h0") DIGPRGS("h1") DIGPRGS("m0") DIGPRGS("m1") DIGPRGS("s0") DIGPRGS("s1") #undef DIGPRG #undef DIGPRGS } } group { name: "e/modules/clock/main"; images.image: "clock_base.png" COMP; images.image: "inset_round_hilight.png" COMP; images.image: "inset_round_shadow.png" COMP; images.image: "inset_round_shading.png" COMP; set { name: "tacho_hand_big"; image { image: "tacho_hand_big.png" COMP; size: 73 73 99999 99999; } image { image: "tacho_hand_big2.png" COMP; size: 37 37 72 72; } image { image: "tacho_hand_big3.png" COMP; size: 19 19 36 36; } image { image: "tacho_hand_big4.png" COMP; size: 0 0 18 18; } } images.image: "tacho_hand_big_shadow.png" COMP; set { name: "tacho_hand_small_min"; image { image: "tacho_hand_small_min.png" COMP; size: 73 73 99999 99999; } image { image: "tacho_hand_small_min2.png" COMP; size: 37 37 72 72; } image { image: "tacho_hand_small_min3.png" COMP; size: 19 19 36 36; } image { image: "tacho_hand_small_min4.png" COMP; size: 0 0 18 18; } } 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-sh"; description { state: "default" 0.0; rel1.to: "base"; rel1.offset: 0 -1; rel2.to: "base"; rel2.offset: -1 -2; image.normal: "inset_round_shadow.png"; } } part { name: "base-hi"; description { state: "default" 0.0; rel1.to: "base"; rel1.offset: 0 1; rel2.to: "base"; rel2.offset: -1 0; image.normal: "inset_round_hilight.png"; } } part { name: "base"; description { state: "default" 0.0; rel1.relative: (25/380) (25/380); rel2.relative: (365/380) (365/380); aspect: 1.0 1.0; aspect_preference: BOTH; image.normal: "clock_base.png"; } } part { name: "seconds-sh"; mouse_events: 0; description { state: "default" 0.0; image.normal: "tacho_hand_big_shadow.png"; rel1.to: "hours-sh"; rel2.to: "hours-sh"; map { on: 1; rotation.center: "seconds-sh"; } } description { state: "hidden" 0.0; inherit: "default" 0.0; visible: 0; } } part { name: "seconds"; mouse_events: 0; description { state: "default" 0.0; image.normal: "tacho_hand_big"; color: 255 0 0 255; rel1.to: "base"; rel2.to: "base"; map { on: 1; rotation.center: "base"; } } description { state: "hidden" 0.0; inherit: "default" 0.0; visible: 0; } } part { name: "minutes-sh"; mouse_events: 0; description { state: "default" 0.0; image.normal: "tacho_hand_big_shadow.png"; rel1.to: "hours-sh"; rel2.to: "hours-sh"; map { on: 1; rotation.center: "minutes-sh"; } } } part { name: "minutes"; mouse_events: 0; description { state: "default" 0.0000; color: 255 255 255 255; image.normal: "tacho_hand_big"; rel1.to: "base"; rel2.to: "base"; map { on: 1; rotation.center: "base"; } } } part { name: "hours-sh"; mouse_events: 0; description { state: "default" 0.0; image.normal: "tacho_hand_small_shadow.png"; rel1.to: "hours"; rel1.relative: 0.0 (15/380); rel1.offset: 0 1; rel2.to: "hours"; rel2.relative: 1.0 (395/380); rel2.offset: -1 0; map { on: 1; rotation.center: "hours-sh"; } } } part { name: "hours"; mouse_events: 0; description { state: "default" 0.0; image.normal: "tacho_hand_small_min"; color: 255 255 255 255; rel1.to: "base"; rel2.to: "base"; map { on: 1; rotation.center: "base"; } } } part { name: "over"; mouse_events: 0; description { state: "default" 0.0; rel1.to: "base"; rel2.to: "base"; image.normal: "inset_round_shading.png"; } } part { name: "knob"; type: SPACER; description { state: "default" 0.0; rel1.relative: (140/340) (140/340); rel1.to: "base"; rel2.relative: (205/340) (205/340); 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; text: "WWe"; 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; text: "00"; 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; text: "000000000000"; 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; text: "0000"; 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 } } } } }