home *** CD-ROM | disk | FTP | other *** search
/ Freelog 117 / FreelogNo117-OctobreNovembre2013.iso / Theme / 8GadgetPack / 8GadgetPackSetup.msi / clock.js_4 < prev    next >
Text (UTF-16)  |  2009-07-13  |  18KB  |  349 lines

  1. ////////////////////////////////////////////////////////////////////////////////
  2. //
  3. // THIS CODE IS NOT APPROVED FOR USE IN/ON ANY OTHER UI ELEMENT OR PRODUCT COMPONENT.
  4. // Copyright (c) 2009 Microsoft Corporation. All rights reserved.
  5. //
  6. ////////////////////////////////////////////////////////////////////////////////
  7. var clockThemes    = new Array("trad", "system", "cronometer", "diner", "flower", "modern", "square", "novelty");
  8. var newPositionMinutes    = 0;
  9. var currentPositionMinutes    = 0;
  10. var newPositionHours    = 0;
  11. var currentPositionHours    = 0;
  12. var midClockNameFontHeight    = 8;
  13. var maxClockNameWidth    = 60;
  14. var posClockNameTop    = 75;
  15. var clockPartsWidth;
  16. var clockPartsHeight;
  17. var clockPartsTop;
  18. var clockPartsLeft;
  19. var date;
  20. var intervalTime;
  21. var newTimeOut;
  22. var clockFont;
  23. var clockFontColor;
  24. var clockFontSize;
  25. ////////////////////////////////////////////////////////////////////////////////
  26. //
  27. // load initial settings
  28. //
  29. ////////////////////////////////////////////////////////////////////////////////
  30. function loadMain()
  31. {
  32.     settingsChanged();
  33.  
  34.     System.Gadget.settingsUI = "settings.html";
  35.     System.Gadget.onSettingsClosed = settingsClosed;
  36.     
  37.     System.Gadget.visibilityChanged = visibilityChanged;
  38.     
  39.     h.addShadow("grey", 2, 40, 2, 2);
  40.     m.addShadow("grey", 2, 40, 2, 2);
  41.     s.addShadow("grey", 2, 40, 2, 2);
  42. }
  43. ////////////////////////////////////////////////////////////////////////////////
  44. //
  45. // set theme images
  46. //
  47. ////////////////////////////////////////////////////////////////////////////////
  48. function setImages()
  49. {
  50.     var curTheme = clockThemes[mySetting.themeID];
  51.     
  52.     clockBg.src = "url(images/" + curTheme + ".png)";
  53.     
  54.     h.src = "images/" + curTheme + "_h.png";
  55.     m.src = "images/" + curTheme + "_m.png";
  56.     s.src = "images/" + curTheme + "_s.png";
  57.     dot.src = "images/" + curTheme + "_dot.png";
  58. }
  59. ////////////////////////////////////////////////////////////////////////////////
  60. //
  61. // calculate current time
  62. //
  63. ////////////////////////////////////////////////////////////////////////////////
  64. function timePerInterval()
  65. {
  66.     refreshDate();
  67.     with (date)
  68.     {
  69.         hours = getHours();
  70.         minutes = getMinutes();
  71.         seconds = getSeconds();
  72.     }
  73.     
  74.     var rotationHours = hours;
  75.  
  76.     if (hours > 12)
  77.     {
  78.         rotationHours = hours - 12;
  79.     }
  80.     
  81.     h.Rotation = (rotationHours * 30) + (minutes / 2);
  82.     m.Rotation = (minutes * 6) + (seconds / 10);
  83.         
  84.     if (mySetting.secondsEnabled)
  85.     {
  86.         s.Rotation = (seconds * 6);
  87.  
  88.         var secondOffset = secondTimeOffset();
  89.             
  90.         if (secondOffset > 0)
  91.         {
  92.             newTimeOut = setTimeout("timePerInterval()", secondOffset);
  93.         }
  94.         else
  95.         {
  96.             timePerInterval();
  97.         }
  98.     }
  99.     else
  100.     {
  101.         var minuteOffset = minuteTimeOffset();
  102.         
  103.         if (minuteOffset > 0)
  104.         {
  105.             newTimeOut = setTimeout("timePerInterval()", minuteOffset);
  106.         }
  107.         else
  108.         {
  109.             timePerInterval();
  110.         }
  111.     }
  112. }
  113. ////////////////////////////////////////////////////////////////////////////////
  114. //
  115. //
  116. ////////////////////////////////////////////////////////////////////////////////
  117. function visibilityChanged()
  118. {
  119.     if (System.Gadget.visible)
  120.     {
  121.         if (!newTimeOut)
  122.         {
  123.             timePerInterval();
  124.         }
  125.     }
  126.     else
  127.     {
  128.         clearTimeout(newTimeOut);
  129.         newTimeOut = null;
  130.     }
  131. }
  132. ////////////////////////////////////////////////////////////////////////////////
  133. //
  134. // updates the tooltip with the current time
  135. //
  136. ////////////////////////////////////////////////////////////////////////////////
  137. function updateTooltip()
  138. {
  139.     refreshDate();
  140.     highlights.title = clockTime.alt = date.toLocaleTimeString();
  141. }
  142. ////////////////////////////////////////////////////////////////////////////////
  143. //
  144. // updates the date object with the current system time
  145. //
  146. ////////////////////////////////////////////////////////////////////////////////
  147. function refreshDate()
  148. {
  149.     if (mySetting.timeZoneIndex != -1 && getValidTimeZone(mySetting.timeZoneIndex) != -1)
  150.     {
  151.         date = new Date(System.Time.getLocalTime(zones.item(mySetting.timeZoneIndex)));
  152.     }
  153.     else
  154.     {
  155.         date = new Date(System.Time.getLocalTime(System.Time.currentTimeZone));
  156.     }
  157. }
  158. ////////////////////////////////////////////////////////////////////////////////
  159. //
  160. // settings event closed
  161. //
  162. ////////////////////////////////////////////////////////////////////////////////
  163. function settingsClosed(event)
  164. {
  165.     if (event.closeAction == event.Action.commit)
  166.     {
  167.         settingsChanged();
  168.     }
  169. }
  170. ////////////////////////////////////////////////////////////////////////////////
  171. // 
  172. // set clock to the new settings
  173. //
  174. ////////////////////////////////////////////////////////////////////////////////
  175. function settingsChanged()
  176. {
  177.     mySetting.load();
  178.  
  179.     if (mySetting.timeZoneIndex != -1 && zonesCount == 0)
  180.     {
  181.         updateTimeZones();
  182.     }
  183.  
  184.     var topPX = 0;
  185.     var leftPX = 0;
  186.  
  187.     clockFont = "Segoe UI, Tahoma, Sans-Serif";
  188.     clockFontColor = "#000000";
  189.     clockFontSize = 10;
  190.     
  191.     var curTheme = clockThemes[getValidThemeID(mySetting.themeID)];
  192.     
  193.     switch (curTheme)
  194.     {
  195.         case "trad":
  196.             clockFont = "Constantia, " + clockFont;
  197.             clockFontColor = "#2F2E2E";
  198.             topPX += -3;
  199.             leftPX += -1;
  200.             maxClockNameWidth = 66;
  201.             clockPartsWidth = 13;
  202.             clockPartsHeight = 129;
  203.             clockPartsTop = -1;
  204.             clockPartsLeft = 57;
  205.             break;
  206.         case "system":
  207.             clockFont = "Arial Narrow, " + clockFont;
  208.             clockFontColor = "#666666";
  209.             topPX += 3;
  210.             leftPX += 1;
  211.             maxClockNameWidth = 72;
  212.             clockPartsWidth = 13;
  213.             clockPartsHeight = 129;
  214.             clockPartsTop = 0;
  215.             clockPartsLeft = 58;
  216.             break;
  217.         case "cronometer":
  218.             clockFont = "Arial Narrow, " + clockFont;
  219.             clockFontColor = "#FF0000";
  220.             topPX += 6;
  221.             maxClockNameWidth = 70;
  222.             clockPartsWidth = 13;
  223.             clockPartsHeight = 129;
  224.             clockPartsTop = -1;
  225.             clockPartsLeft = 57;
  226.             break;
  227.         case "diner":
  228.             clockFont = "Segoe Script Bold, " + clockFont;
  229.             clockFontColor = "#D3D9E3";
  230.             clockFontSize = 9;
  231.             maxClockNameWidth = 56;
  232.             clockPartsWidth = 13;
  233.             clockPartsHeight = 129;
  234.             clockPartsTop = -1;
  235.             clockPartsLeft = 58;
  236.             break;
  237.         case "flower":
  238.             clockFont = "Arial Rounded MT Bold, " + clockFont;
  239.             clockFontColor="#FE8E08";
  240.             clockFontSize = 9;
  241.             topPX += 2;
  242.             leftPX += 2;
  243.             maxClockNameWidth = 71;
  244.             clockPartsWidth = 13;
  245.             clockPartsHeight = 129;
  246.             clockPartsTop = 0;
  247.             clockPartsLeft = 59;
  248.             break;
  249.         case "modern":
  250.             clockFont = "Arial Narrow, " + clockFont;
  251.             clockFontColor = "#FFFFFF";
  252.             topPX += 3;
  253.             maxClockNameWidth = 74;
  254.             clockPartsWidth = 13;
  255.             clockPartsHeight = 129;
  256.             clockPartsTop = -1;
  257.             clockPartsLeft = 58;
  258.             break;
  259.         case "square":
  260.             clockFont = "Calibri, " + clockFont;
  261.             clockFontColor = "#000000";
  262.             clockFontSize = 9;
  263.             maxClockNameWidth = 70;
  264.             clockPartsWidth = 13;
  265.             clockPartsHeight = 129;
  266.             clockPartsTop = -1;
  267.             clockPartsLeft = 57;
  268.             break;
  269.         case "novelty":
  270.             clockFont = "Calibri Bold, " + clockFont;
  271.             clockFontColor = "#6dadff";
  272.             clockFontSize = 10;
  273.             topPX += 18;
  274.             maxClockNameWidth = 60;
  275.             clockPartsWidth = 7;
  276.             clockPartsHeight = 81;
  277.             clockPartsTop = 46;
  278.             clockPartsLeft = 59;
  279.             break;
  280.     }
  281.     
  282.     dot.style.width = h.style.width = m.style.width = s.style.width = clockPartsWidth;
  283.     dot.style.height = h.style.height = m.style.height = s.style.height = clockPartsHeight;
  284.     dot.style.top = h.style.top = m.style.top = s.style.top = clockPartsTop;
  285.     dot.style.left = h.style.left = m.style.left = s.style.left = clockPartsLeft;
  286.     
  287.     setImages();
  288.  
  289.     with (clockNamePosition.style)
  290.     {
  291.         top = posClockNameTop + topPX + "px";
  292.         left = leftPX + "px";
  293.         visibility = "hidden";
  294.     }
  295.  
  296.     if (mySetting.clockName.length > 0)
  297.     {
  298.         with (clockName.style)
  299.         {
  300.             width = maxClockNameWidth + "px";
  301.             fontFamily = clockFont;
  302.             color = clockFontColor;
  303.             fontSize = clockFontSize + "pt";
  304.         }
  305.         
  306.         clockName.innerText = mySetting.clockName;
  307.         
  308.         with (clockNamePosition.style)
  309.         {
  310.             top = parseInt(top) + midClockNameFontHeight - Math.floor(clockName.offsetHeight / 2) + "px";
  311.             visibility = "visible";
  312.         }
  313.     }
  314.  
  315.     clearTimeout(newTimeOut);
  316.  
  317.     if (mySetting.secondsEnabled)
  318.     {
  319.         s.style.visibility = "visible"; 
  320.         dot.style.visibility = "hidden"; 
  321.     }
  322.     else
  323.     {
  324.         s.style.visibility = "hidden";
  325.         dot.style.visibility = "visible";
  326.     }
  327.     
  328.     timePerInterval();
  329. }
  330. ////////////////////////////////////////////////////////////////////////////////
  331. //
  332. // calculates how many milliseconds remain until the start of the next second
  333. //
  334. ////////////////////////////////////////////////////////////////////////////////
  335. function secondTimeOffset()
  336. {
  337.     return 1000 - new Date().getMilliseconds();
  338. }
  339. ////////////////////////////////////////////////////////////////////////////////
  340. //
  341. // calculates how many milliseconds remain until the start of the next minute
  342. //
  343. ////////////////////////////////////////////////////////////////////////////////
  344. function minuteTimeOffset()
  345. {
  346.     var d = new Date();
  347.     return ((60 - d.getSeconds()) * 1000) - d.getMilliseconds();
  348. }
  349.