group { name: "e/modules/clock/digital"; min: 64 16; max: 512 128; 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: "digit_sep.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, FLOOR); v = v % 60; 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/30) 0.0; rel2.relative: (4/30) 1.0; rel1.to: "timearea"; rel2.to: "timearea"; visible: 0; } } part { name: "hours2"; type: RECT; description { state: "default" 0.0; rel1.relative: (4/30) 0.0; rel2.relative: (8/30) 1.0; rel1.to: "timearea"; rel2.to: "timearea"; visible: 0; } } part { name: "mins1"; type: RECT; description { state: "default" 0.0; rel1.relative: (9/30) 0.0; rel2.relative: (13/30) 1.0; rel1.to: "timearea"; rel2.to: "timearea"; visible: 0; } } part { name: "mins2"; type: RECT; description { state: "default" 0.0; rel1.relative: (13/30) 0.0; rel2.relative: (17/30) 1.0; rel1.to: "timearea"; rel2.to: "timearea"; visible: 0; } } part { name: "secs1"; type: RECT; description { state: "default" 0.0; rel1.relative: (18/30) 0.0; rel2.relative: (22/30) 1.0; rel1.to: "timearea"; rel2.to: "timearea"; visible: 0; } } part { name: "secs2"; type: RECT; description { state: "default" 0.0; rel1.relative: (22/30) 0.0; rel2.relative: (26/30) 1.0; rel1.to: "timearea"; rel2.to: "timearea"; visible: 0; } } part { name: "ampm"; type: RECT; description { state: "default" 0.0; rel1.relative: (26/30) 0.0; rel2.relative: (30/30) 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.39; rel2.to: "mins1"; rel2.relative: 0.0 0.45; image.normal: "digit_sep.png"; color_class: "/fg/normal/gadgets/clock/digital/separator"; aspect: 1.0 1.0; aspect_preference: BOTH; } } part { name: "c01"; description { state: "default" 0.0; rel1.to: "hours2"; rel1.relative: 1.0 0.55; rel2.to: "mins1"; rel2.relative: 0.0 0.61; image.normal: "digit_sep.png"; color_class: "/fg/normal/gadgets/clock/digital/separator"; aspect: 1.0 1.0; aspect_preference: BOTH; } } part { name: "c10"; clip_to: "secclip"; description { state: "default" 0.0; rel1.to: "mins2"; rel1.relative: 1.0 0.39; rel2.to: "secs1"; rel2.relative: 0.0 0.45; image.normal: "digit_sep.png"; color_class: "/fg/normal/gadgets/clock/digital/separator"; aspect: 1.0 1.0; aspect_preference: BOTH; } } part { name: "c11"; clip_to: "secclip"; description { state: "default" 0.0; rel1.to: "mins2"; rel1.relative: 1.0 0.55; rel2.to: "secs1"; rel2.relative: 0.0 0.61; image.normal: "digit_sep.png"; color_class: "/fg/normal/gadgets/clock/digital/separator"; aspect: 1.0 1.0; aspect_preference: BOTH; } } #define ELEM(_NAME, _TO, _DIGIT, _CC) \ 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; /* no cc */ \ color_class: _CC; \ } \ description { state: "active" 0.0; \ inherit: "default" 0.0; \ visible: 1; \ color: 255 255 255 255; /* no cc */ \ } \ } #define DIGIT(_NAME, _TO, _CC) \ ELEM(_NAME"-0", _TO, "0", _CC) \ ELEM(_NAME"-1", _TO, "1", _CC) \ ELEM(_NAME"-2", _TO, "2", _CC) \ ELEM(_NAME"-3", _TO, "3", _CC) \ ELEM(_NAME"-4", _TO, "4", _CC) \ ELEM(_NAME"-5", _TO, "5", _CC) \ ELEM(_NAME"-6", _TO, "6", _CC) \ ELEM(_NAME"-7", _TO, "7", _CC) \ ELEM(_NAME"-8", _TO, "8", _CC) \ ELEM(_NAME"-9", _TO, "9", _CC) #define ELEMC(_NAME, _TO, _DIGIT, _CLIP, _CC) \ 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; /* no cc */ \ color_class: _CC; \ } \ description { state: "active" 0.0; \ inherit: "default" 0.0; \ visible: 1; \ color: 255 255 255 255; /* no cc */ \ } \ } #define DIGITC(_NAME, _TO, _CLIP, _CC) \ ELEMC(_NAME"-0", _TO, "0", _CLIP, _CC) \ ELEMC(_NAME"-1", _TO, "1", _CLIP, _CC) \ ELEMC(_NAME"-2", _TO, "2", _CLIP, _CC) \ ELEMC(_NAME"-3", _TO, "3", _CLIP, _CC) \ ELEMC(_NAME"-4", _TO, "4", _CLIP, _CC) \ ELEMC(_NAME"-5", _TO, "5", _CLIP, _CC) \ ELEMC(_NAME"-6", _TO, "6", _CLIP, _CC) \ ELEMC(_NAME"-7", _TO, "7", _CLIP, _CC) \ ELEMC(_NAME"-8", _TO, "8", _CLIP, _CC) \ ELEMC(_NAME"-9", _TO, "9", _CLIP, _CC) #define TAG(_NAME, _TO, _CLIP, _CC) \ 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"; \ color_class: _CC; \ } \ description { state: "active" 0.0; \ inherit: "default" 0.0; \ image.normal: "digit_pm.png"; \ } \ } // color_class: "/fg/normal/gadgets/clock/time/digital/hours"; // color_class: "/fg/normal/gadgets/clock/time/digital/mins"; // color_class: "/fg/normal/gadgets/clock/time/digital/secs"; // color_class: "/fg/normal/gadgets/clock/time/digital/ampm"; DIGIT ("h0", "hours1", "/fg/normal/gadgets/clock/time/digital/hours") DIGIT ("h1", "hours2", "/fg/normal/gadgets/clock/time/digital/hours") DIGIT ("m0", "mins1", "/fg/normal/gadgets/clock/time/digital/mins") DIGIT ("m1", "mins2", "/fg/normal/gadgets/clock/time/digital/mins") DIGITC("s0", "secs1", "secclip", "/fg/normal/gadgets/clock/time/digital/secs") DIGITC("s1", "secs2", "secclip", "/fg/normal/gadgets/clock/time/digital/secs") TAG("ap", "ampm", "ampmclip", "/fg/normal/gadgets/clock/time/digital/ampm") #undef TAG #undef TAG #undef ELEM #undef ELEMC #undef DIGIT #undef DIGITC part { name: "e.text.today"; type: TEXT; 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_class: "/fg/normal/gadgets/clock/time/text/date"; text { font: FN; 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; text.min: 0 1; text.ellipsis: 0; } } part { name: "event"; type: RECT; description { state: "default" 0.0; color: 0 0 0 0; // no cc } } } 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; \ target: _NAME; \ } \ program { signal: "hide,"_NAME; source: "c"; \ action: STATE_SET "default" 0.0; \ transition: DECELERATE 0.1; \ 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 program { signal: "e,state,freeze"; source: "e"; script { new tim; tim = get_int(tick_timer); if (tim) { cancel_timer(tim); set_int(tick_timer, 0); } } } program { signal: "e,state,thaw"; source: "e"; script { new tim; tim = get_int(tick_timer); if (tim) { cancel_timer(tim); set_int(tick_timer, 0); } clock_cb(0); } } } } group { name: "e/modules/clock/main"; set { name: "clock_base"; image { image: "clock_base-040.png" COMP; size: 81 81 99999 99999; } image { image: "clock_base-080.png" COMP; size: 41 41 80 80; } image { image: "clock_base-160.png" COMP; size: 0 0 40 40; } } set { name: "clock_base_digits"; image { image: "clock_base_digits-040.png" COMP; size: 81 81 99999 99999; } image { image: "clock_base_digits-080.png" COMP; size: 41 41 80 80; } image { image: "clock_base_digits-160.png" COMP; size: 0 0 40 40; } } set { name: "clock_hand_secs"; image { image: "clock_hand_secs-040.png" COMP; size: 81 81 99999 99999; } image { image: "clock_hand_secs-080.png" COMP; size: 41 41 80 80; } image { image: "clock_hand_secs-160.png" COMP; size: 0 0 40 40; } } set { name: "clock_hand_mins"; image { image: "clock_hand_mins-040.png" COMP; size: 81 81 99999 99999; } image { image: "clock_hand_mins-080.png" COMP; size: 41 41 80 80; } image { image: "clock_hand_mins-160.png" COMP; size: 0 0 40 40; } } set { name: "clock_hand_hours"; image { image: "clock_hand_hours-040.png" COMP; size: 81 81 99999 99999; } image { image: "clock_hand_hours-080.png" COMP; size: 41 41 80 80; } image { image: "clock_hand_hours-160.png" COMP; size: 0 0 40 40; } } 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, FLOOR); 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); } 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:"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); } } parts { part { name: "base"; mouse_events: 0; description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH; image.normal: "clock_base"; color_class: "/bg/normal/gadgets/clock/analog/base"; } } part { name: "digits"; mouse_events: 0; description { state: "default" 0.0; rel.to: "base"; image.normal: "clock_base_digits"; color_class: "/fg/normal/gadgets/clock/analog/digits"; } } part { name: "seconds"; mouse_events: 0; description { state: "default" 0.0; image.normal: "clock_hand_secs"; color_class: "/fg/normal/gadgets/clock/analog/hands/secs"; rel.to: "base"; map { on: 1; rotation.center: "base"; } } description { state: "hidden" 0.0; inherit: "default" 0.0; visible: 0; } } part { name: "minutes"; mouse_events: 0; description { state: "default" 0.0; image.normal: "clock_hand_mins"; color_class: "/fg/normal/gadgets/clock/analog/hands/mins"; rel.to: "base"; map { on: 1; rotation.center: "base"; } } } part { name: "hours"; mouse_events: 0; description { state: "default" 0.0; image.normal: "clock_hand_hours"; color_class: "/fg/normal/gadgets/clock/analog/hands/hours"; rel.to: "base"; map { on: 1; rotation.center: "base"; } } } part { name: "event"; type: RECT; description { state: "default" 0.0; color: 0 0 0 0; // no cc } } } 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"; 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"; 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); } } program { signal: "e,state,freeze"; source: "e"; script { new tim; tim = get_int(tick_timer); if (tim) { cancel_timer(tim); set_int(tick_timer, 0); } } } program { signal: "e,state,thaw"; source: "e"; script { new tim; 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; scale: 1; description { state: "default" 0.0; color_class: "/fg/normal/gadgets/clock/cal/day/name/week"; text { font: FN; size: 8; text: "WWe"; min: 1 1; ellipsis: -1; align: 0.5 0.5; text_class: "module_small"; } } description { state: "weekend" 0.0; inherit: "default" 0.0; color_class: "/fg/normal/gadgets/clock/cal/day/name/weekend"; } } } 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); set_state(PART:"base", "today", 0.0); } else if (vv & 4) { set_state(PART:"e.text.label", "hidden", 0.0); set_state(PART:"label2", "default", 0.0); set_state(PART:"base", "default", 0.0); } else if (vv & 1) { set_state(PART:"e.text.label", "weekend", 0.0); set_state(PART:"label2", "default", 0.0); set_state(PART:"base", "default", 0.0); } else { set_state(PART:"e.text.label", "default", 0.0); set_state(PART:"label2", "default", 0.0); set_state(PART:"base", "default", 0.0); } } } parts { part { name: "base"; type: RECT; mouse_events: 0; description { state: "default" 0.0; color_class: "/bg/normal/gadgets/clock/cal/day/date/normal"; visible: 0; } description { state: "today" 0.0; inherit: "default" 0.0; color_class: "/bg/normal/gadgets/clock/cal/day/date/today"; visible: 1; } description { state: "weekend" 0.0; inherit: "default" 0.0; color_class: "/bg/normal/gadgets/clock/cal/day/date/weekend"; visible: 1; } description { state: "hidden" 0.0; inherit: "default" 0.0; color_class: "/bg/normal/gadgets/clock/cal/day/date/hidden"; visible: 1; } } part { name: "e.text.label"; type: TEXT; mouse_events: 0; scale: 1; description { state: "default" 0.0; color_class: "/fg/normal/gadgets/clock/cal/day/date/normal"; rel1.offset: 3 3; rel2.offset: -4 -4; offscale; text { font: FN; size: 10; text: "00"; min: 1 1; ellipsis: -1; align: 0.5 0.5; } } description { state: "today" 0.0; inherit: "default" 0.0; color_class: "/fg/normal/gadgets/clock/cal/day/date/today"; visible: 0; } description { state: "weekend" 0.0; inherit: "default" 0.0; color_class: "/fg/normal/gadgets/clock/cal/day/date/weekend"; } description { state: "hidden" 0.0; inherit: "default" 0.0; color_class: "/fg/normal/gadgets/clock/cal/day/date/faded"; } } part { name: "label2"; type: TEXT; mouse_events: 0; scale: 1; description { state: "default" 0.0; color_class: "/fg/normal/gadgets/clock/cal/day/date/today"; rel.to: "e.text.label"; text { font: FN; size: 10; text_source: "e.text.label"; min: 1 1; ellipsis: -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"; parts { part { name: "e.text.month"; type: TEXT; 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; rel1.offset: 4 0; rel2.relative: 1.0 0.0; color_class: "/fg/normal/gadgets/clock/cal/month"; text { font: FNBD; 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; 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.offset: -5 -1; rel2.relative: 0.0 0.0; color_class: "/fg/normal/gadgets/clock/cal/year"; text { font: FNBD; size: 10; text: "0000"; align: 1.0 0.5; min: 0 1; text_class: "module_normal"; } } } part { name: "previm"; mouse_events: 0; scale: 1; description { state: "default" 0.0; fixed: 1 1; min: 15 15; max: 15 15; rel.to: "prev"; image.normal: "i-arrow-l"; color_class: "/fg/normal/gadgets/clock/cal/prev"; } description { state: "pressed" 0.0; inherit: "default" 0.0; color_class: "/fg/pressed/gadgets/clock/cal/prev"; } } part { name: "prev"; type: RECT; description { state: "default" 0.0; align: 0.0 0.5; color: 0 0 0 0; // no cc 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 { signal: "mouse,down,1*"; source: "prev"; action: STATE_SET "pressed" 0.0; target: "previm"; } program { signal: "mouse,up,1"; source: "prev"; action: STATE_SET "default" 0.0; target: "previm"; } program { signal: "mouse,clicked,1*"; source: "prev"; action: SIGNAL_EMIT "e,action,prev" ""; } } part { name: "nextim"; mouse_events: 0; scale: 1; description { state: "default" 0.0; fixed: 1 1; min: 15 15; max: 15 15; rel.to: "next"; image.normal: "i-arrow-r"; color_class: "/fg/normal/gadgets/clock/cal/next"; } description { state: "pressed" 0.0; inherit: "default" 0.0; color_class: "/fg/pressed/gadgets/clock/cal/next"; } } part { name: "next"; type: RECT; description { state: "default" 0.0; align: 1.0 0.5; color: 0 0 0 0; // no cc 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 { signal: "mouse,down,1"; source: "next"; action: STATE_SET "pressed" 0.0; target: "nextim"; } program { signal: "mouse,up,1"; source: "next"; action: STATE_SET "default" 0.0; target: "nextim"; } program { signal: "mouse,clicked,1"; source: "next"; action: SIGNAL_EMIT "e,action,next" ""; } } part { name: "sep"; type: RECT; description { state: "default" 0.0; color_class: "/fg/normal/gadgets/clock/cal/daydate-sep"; rel1.relative: 0.0 1.0; rel1.offset: 8 0; rel1.to: "e.table.daynames"; rel2.relative: 1.0 0.0; rel2.offset: -9 -1; rel2.to_y: "e.table.days"; min: 0 1; max: 99999 1; } } 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: 8 2; rel2.to_y: "e.text.month"; rel2.relative: 1.0 1.0; rel2.offset: -9 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; scale: 1; description { state: "default" 0.0; rel1.to_y: "e.table.daynames"; rel1.relative: 0.0 1.0; rel1.offset: 8 16; rel2.offset: -9 -9; offscale; 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 } } } } }