Advertisement
ExtremeHunter

Spinning Disc Image Viewer (for pre 1.5 wsh) 2

Sep 12th, 2013
407
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ================================================== //
  2. // @name "Spinning Disc Image Viewer (for pre 1.5 WSH and for portable foobar2000) (13.09.2013)"
  3. // @author "eXtremeHunter"
  4. // ================================================== //
  5. var WshShell = new ActiveXObject("WScript.Shell");
  6. var fso = new ActiveXObject("Scripting.FileSystemObject");
  7.  
  8. function RGB(r, g, b) {
  9.     return (0xff000000 | (r << 16) | (g << 8) | (b));
  10. }
  11. window.DlgCode = 0x0001; // arrow keys for DUI
  12. var defaultImage = "\\disc.jpg";
  13. var folder_path_panel = fb.ProfilePath + "user-addons\\wsh-spinning-disc-image";
  14. var defaultDisc = gdi.Image(folder_path_panel + defaultImage);
  15. var defaultMargin = 50;
  16. var margin = window.GetProperty("Margin", defaultMargin);
  17. var zoomStep = window.GetProperty("Zoom Step", 30);
  18. var useDiscMask = window.GetProperty("Use Disc Mask", true);
  19.  
  20. var angle = 0;
  21. var minSize = 20;
  22. var disc = defaultDisc;
  23. var rotationInterval = 50;
  24. var rotationTimer;
  25. var rotationTimerStarted = false;
  26. var discPath;
  27.  
  28. // ============================== //
  29.  
  30. function on_paint(gr) {
  31.  
  32.     gr.FillGradRect(0, 0, ww, wh, 65, RGB(50, 50, 50), RGB(105, 105, 105), 0.5);
  33.  
  34.     disc && gr.DrawImage(resizedDisc, discX, discY, discW, discH, 0, 0, resizedDisc.Width, resizedDisc.Height, angle);
  35.  
  36. }
  37. // ============================== //
  38.  
  39. function on_mouse_wheel(step) {
  40.  
  41.     if (utils.IsKeyPressed(16)) {
  42.  
  43.         if (step == -1 && discW <= minSize) return;
  44.  
  45.         var s = step * zoomStep;
  46.         margin = margin -= s;
  47.         window.SetProperty("Margin", margin);
  48.         on_size();
  49.  
  50.         window.Repaint();
  51.  
  52.     }
  53.  
  54. }
  55. // ============================== //
  56.  
  57. function on_key_down(vkey) {
  58.  
  59.     if (vkey == 38) on_mouse_wheel(1) //UP ARROW
  60.     if (vkey == 40) on_mouse_wheel(-1); //DOWN ARROW
  61.  
  62. }
  63. // ============================== //
  64.  
  65. function on_size() {
  66.  
  67.     ww = window.Width;
  68.     wh = window.Height;
  69.  
  70.     discW = Math.max(minSize, ww - margin);
  71.     discH = Math.max(minSize, wh - margin);
  72.  
  73.     if (discH < discW) discW = discH;
  74.     else if (discW < discH) discH = discW;
  75.  
  76.     discX = ww / 2 - discW / 2;
  77.     discY = wh / 2 - discH / 2;
  78.  
  79.     if (!disc) return;
  80.  
  81.     resizedDisc = disc.resize(discW, discH);
  82.  
  83.     if (useDiscMask) {
  84.  
  85.         var discMask = gdi.CreateImage(discW, discH);
  86.         var g = discMask.GetGraphics();
  87.         g.FillSolidRect(0, 0, discW, discH, 0xffffffff);
  88.         g.SetSmoothingMode(2);
  89.         g.FillEllipse(1, 1, discW - 2, discH - 2, 0xff000000);
  90.         discMask.ReleaseGraphics(g);
  91.         resizedDisc.ApplyMask(discMask);
  92.         discMask.Dispose();
  93.  
  94.     }
  95.  
  96. }
  97. // ============================== //
  98. (function onRotationTimer() {
  99.  
  100.     getDiscImage();
  101.  
  102.     if (!fb.IsPlaying || fb.IsPaused) {
  103.         return;
  104.     }
  105.  
  106.     if (!rotationTimerStarted) {
  107.  
  108.         rotationTimer = window.CreateTimerInterval(rotationInterval);
  109.         rotationTimerStarted = true;
  110.     }
  111.  
  112. })();
  113. // ============================== //
  114.  
  115. function stopRotationTimer() {
  116.  
  117.     window.KillTimer(rotationTimer);
  118.     rotationTimerStarted = false;
  119.  
  120. }
  121. // ============================== //
  122.  
  123. function on_timer(id) {
  124.  
  125.     if (rotationTimer && id == rotationTimer.ID) {
  126.  
  127.         if (angle >= 360) angle = 0;
  128.         angle += 10;
  129.         (discW >= ww || discH >= wh) ? window.Repaint() : window.RepaintRect(discX, discY, discW, discH);
  130.  
  131.     }
  132.  
  133. }
  134. // ============================== //
  135.  
  136. function on_playback_stop(reason) {
  137.  
  138.     if (reason != 2) {
  139.         stopRotationTimer();
  140.         getDiscImage();
  141.     }
  142. }
  143. // ============================== //
  144.  
  145. function on_playback_pause(state) {
  146.  
  147.     state ? stopRotationTimer() : onRotationTimer();
  148.  
  149. }
  150. // ============================== //
  151.  
  152. function on_playback_new_track() {
  153.  
  154.     onRotationTimer();
  155.  
  156. }
  157. // ============================== //
  158. var tempAlbum;
  159.  
  160. function getDiscImage() {
  161.  
  162.     var metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
  163.  
  164.     if (!metadb) return;
  165.  
  166.     var currentAlbum = fb.TitleFormat("%album%%discnumber%").EvalWithMetadb(metadb);
  167.  
  168.     if (currentAlbum == tempAlbum) return;
  169.  
  170.     utils.GetAlbumArtAsync(window.ID, metadb, 2);
  171.  
  172.     tempAlbum = currentAlbum;
  173.  
  174. }
  175.  
  176. function on_get_album_art_done(metadb, art_id, image, image_path) {
  177.  
  178.  
  179.     if (image) {
  180.         disc = image;
  181.         discPath = image_path;
  182.     } else {
  183.         disc = defaultDisc;
  184.         discPath = folder_path_panel + defaultImage;
  185.     }
  186.  
  187.     on_size();
  188.     window.Repaint();
  189.  
  190. }
  191.  
  192. // ============================== //
  193.  
  194. function on_selection_changed(metadb) {
  195.     if (!fb.IsPlaying) getDiscImage();
  196. }
  197. // ============================== //
  198.  
  199. function on_playlist_items_removed() {
  200.  
  201.     if (!plman.PlaylistItemCount(plman.ActivePlaylist)) disc = defaultDisc;
  202.     on_size();
  203.     window.Repaint();
  204.  
  205. }
  206.  
  207. // ============================== //
  208.  
  209. MF_GRAYED = 0x00000001;
  210. MF_STRING = 0x00000000;
  211.  
  212. function on_mouse_rbtn_up(x, y) {
  213.     metadb = fb.GetNowPlaying();
  214.  
  215.     var _menu = window.CreatePopupMenu();
  216.     var idx = 0;
  217.     _menu.AppendMenuItem(discPath ? MF_STRING : MF_GRAYED, 1, "Open folder of this disc");
  218.     _menu.AppendMenuSeparator();
  219.     _menu.AppendMenuItem(fso.FolderExists(folder_path_panel) ? MF_STRING : MF_GRAYED, 2, "Open folder of this panel");
  220.     _menu.AppendMenuSeparator();
  221.     _menu.AppendMenuItem(MF_STRING, 3, "Fit image");
  222.     _menu.CheckMenuItem(3, !margin);
  223.     _menu.AppendMenuSeparator();
  224.     _menu.AppendMenuItem(MF_STRING, 100, "Configure...");
  225.     idx = _menu.TrackPopupMenu(x, y);
  226.     switch (idx) {
  227.     case 1:
  228.         try {
  229.             WshShell.Run("explorer /select," + "\"" + discPath + "\"");
  230.         } catch (e) {}
  231.         break;
  232.     case 2:
  233.         try {
  234.             WshShell.Run("explorer /n," + folder_path_panel);
  235.         } catch (e) {}
  236.         break;
  237.     case 3:
  238.         margin ? margin = 0 : margin = defaultMargin;
  239.         window.SetProperty("margin", margin);
  240.         on_size();
  241.         window.Repaint();
  242.         break;
  243.     case 100:
  244.         window.ShowConfigure();
  245.         break;
  246.     }
  247.     _menu.Dispose();
  248.     return true;
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement