Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2018
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.08 KB | None | 0 0
  1. // ====================================== //
  2. // @name "Bottom Panel (22.10.2013)"
  3. // @author "eXtremeHunter"
  4. // ====================================== //
  5. var font = gdi.font("Consolas", 14, 1);
  6. var SF = StringFormat(1, 1);
  7.  
  8. var posColor = RGB(110, 112, 114);
  9. var sliderBackColor = RGB(37, 37, 37);
  10. var b = [];
  11.  
  12. createButtonImages();
  13.  
  14. // ============================= //
  15.  
  16. function on_paint(gr) {
  17.  
  18. gr.SetTextRenderingHint(5);
  19. var p = 5;
  20. // --- DRAW SEEKBAR --- //
  21.  
  22. var x = seekbarX,
  23. y = seekbarY,
  24. w = seekbarW,
  25. h = seekbarH,
  26. bool = (fb.IsPlaying && fb.PlaybackTime),
  27. metadb = fb.GetFocusItem(),
  28. playbackTimeRemaining = bool ? fb.TitleFormat("[%playback_time_remaining%]").Eval() : "0:00",
  29. timeRemaining = ((playbackTimeRemaining != "0:00" ? "-" : " ") + playbackTimeRemaining),
  30. isStream = (bool && (fb.GetNowPlaying().RawPath.indexOf("http://") == 0)),
  31. length = (fb.IsPlaying ? (!fb.PlaybackTime ? "0:00" : fb.TitleFormat("%length%").Eval()) : metadb && fb.TitleFormat("$if(%length%,%length%,0:00)").EvalWithMetadb(metadb)),
  32. sliderTextColor = (fb.IsPlaying ? RGB(130, 132, 134) : RGB(80, 80, 80));
  33. time2 = isStream ? "stream" : (showTimeRemaining && playbackTimeRemaining ? timeRemaining : " " + length);
  34.  
  35. if (slider["seekbar"].state != 2 || isStream) {
  36. seekbarPos = ((bool && !isStream) ? Math.round(Math.max(0, Math.min(w, (w * (fb.PlaybackTime / fb.PlaybackLength))))) : 0);
  37. seekbarTime1 = (bool ? fb.TitleFormat("%playback_time%").Eval() : "0:00");
  38. seekbarTime2 = (fb.IsPlaying ? (fb.IsPlaying && seekbarTime1 == "0:00" ? "-" + fb.TitleFormat("%length%").Eval() : time2) : (metadb ? " " + length : " 0:00"));
  39. }
  40.  
  41. gr.FillSolidRect(x, y + p, w, h - p * 2, sliderBackColor);
  42. gr.FillSolidRect(x, y + p, seekbarPos, h - p * 2, posColor);
  43. gr.DrawString(seekbarTime1, font, sliderTextColor, x - seekbarTextW, y - 1, seekbarTextW, h, SF);
  44. gr.DrawString(seekbarTime2, font, sliderTextColor, x + w, y - 1, seekbarTextW, h, SF);
  45.  
  46. // --- DRAW VOLBAR --- //
  47.  
  48. var x = volbarX,
  49. y = volbarY,
  50. w = volbarW,
  51. h = volbarH,
  52. val = vol2pos(fb.Volume);
  53. if (val != 0) {
  54. volbarText = Math.round(val * 100) + "%";
  55. textColor = sliderTextColor;
  56. } else {
  57. volbarText = "MUTE";
  58. // TODO maybe change
  59. textColor = RGB(222, 12, 112);
  60. }
  61. gr.FillSolidRect(x, y + p, w, h - p * 2, sliderBackColor);
  62. gr.FillSolidRect(x, y + p, volbarPos, h - p * 2, posColor);
  63. //gr.DrawRect(x, y, w, h, 1, sliderFrameColor);
  64. //gr.DrawString(volbarText, font, textColor, x+w, y-1, volbarTextW, h, SF);
  65. //gr.DrawString(slider["volbar"].state, font, textColor, x, y, w, h, SF);
  66.  
  67. //---> Draw buttons
  68.  
  69. for (var i in b) {
  70.  
  71. var x = b[i].x,
  72. y = b[i].y,
  73. w = b[i].w,
  74. h = b[i].h,
  75. s = b[i].state,
  76. ha = b[i].hoverAlpha,
  77. da = b[i].downAlpha,
  78. img = b[i].img;
  79.  
  80. gr.DrawImage(img[0], x, y, w, h, 0, 0, w, h, 0, 255); // normal
  81. gr.DrawImage(img[1], x, y, w, h, 0, 0, w, h, 0, b[i].hoverAlpha);
  82. gr.DrawImage(img[2], x, y, w, h, 0, 0, w, h, 0, b[i].downAlpha);
  83.  
  84. //gr.DrawRect(x, y, w-1, h-1, 1, RGB(255,255,0));
  85.  
  86. }
  87.  
  88. }
  89. // ============================= //
  90.  
  91. function on_size() {
  92.  
  93. ww = window.Width;
  94. wh = window.Height;
  95.  
  96. var offset = 2;
  97. var sliderH = 14;
  98. var sliderY = Math.floor(wh / 2 - sliderH / 2) + offset;
  99. var textW = 70;
  100. var volW = 120;
  101. var volX = ww - volW - 35;
  102. var gap = 80;
  103. createSeekbar(textW, sliderY, volX - textW * 2 - gap, sliderH, textW);
  104. createVolbar(volX, sliderY, volW, sliderH, textW);
  105.  
  106. //---> Buttons
  107.  
  108.  
  109. var w = btnImg.Repeat[0].Width;
  110. var y = Math.floor(wh / 2 - w / 2) + offset - 1;
  111. var h = w;
  112. var p = 9;
  113. var x = volX - gap + 2;
  114.  
  115. if (fb.PlaybackOrder == playbackOrder.RepeatPlaylist) img = btnImg.RepeatPlaylist;
  116. else if (fb.PlaybackOrder == playbackOrder.RepeatTrack) img = btnImg.Repeat1;
  117. else img = btnImg.Repeat;
  118.  
  119. b[0] = new Button(x, y, w, h, "Repeat", img);
  120. b[1] = new Button(x + w + p, y, btnImg.Shuffle[0].Width, h, "Shuffle", (fb.PlaybackOrder == playbackOrder.ShuffleTracks) ? btnImg.ShuffleTracks : btnImg.Shuffle);
  121. b[2] = new Button(ww - 30, y, w, h, "Mute", fb.Volume == -100 ? btnImg.Muted : btnImg.Mute);
  122.  
  123. }
  124. // ================================== //
  125. // ########## MOUSE EVENTS ########## //
  126. // ================================== //
  127.  
  128. // ============================= //
  129.  
  130. function on_mouse_wheel(step) {
  131.  
  132. sliderEventHandler(step);
  133.  
  134. }
  135. // ============================= //
  136.  
  137. function on_mouse_move(x, y, m) {
  138.  
  139. buttonEventHandler(x, y, m);
  140.  
  141. try {
  142. if (UIHacks.FrameStyle == 3 && !UIHacks.DisableSizing) {
  143.  
  144. UIHacks.DisableSizing = true;
  145. //print("DisableSizing");
  146. }
  147. } catch (e) {};
  148.  
  149. sliderEventHandler(x, y, m);
  150.  
  151.  
  152. }
  153. // ============================= //
  154.  
  155. function on_mouse_lbtn_down(x, y, m) {
  156.  
  157. buttonEventHandler(x, y, m);
  158. sliderEventHandler(x, y, m);
  159.  
  160. }
  161. // ============================= //
  162.  
  163. function on_mouse_lbtn_dblclk(x, y, m) {
  164.  
  165. buttonEventHandler(x, y, m);
  166. sliderEventHandler(x, y, m);
  167.  
  168. }
  169. // ============================= //
  170.  
  171. function on_mouse_lbtn_up(x, y, m) {
  172.  
  173. buttonEventHandler(x, y, m);
  174. sliderEventHandler(x, y, m);
  175.  
  176. }
  177. // ============================= //
  178.  
  179. function on_mouse_leave() {
  180.  
  181. buttonEventHandler(0, 0, 0);
  182. sliderEventHandler(0, 0, 0);
  183.  
  184. try {
  185.  
  186. if (UIHacks.FrameStyle == 3 && UIHacks.DisableSizing) {
  187.  
  188. UIHacks.DisableSizing = false;
  189. //print("EnableSizing");
  190.  
  191. }
  192.  
  193. } catch (e) {};
  194.  
  195. }
  196. // ============================= //
  197.  
  198. function on_playback_starting(cmd, is_paused) {
  199. if (!is_paused) startSeekbarTimer();
  200. }
  201. // ============================= //
  202.  
  203. function on_playback_pause(state) {
  204.  
  205. if (!state) startSeekbarTimer();
  206.  
  207. }
  208. // ============================= //
  209.  
  210. function on_playback_stop(reason) {
  211. if (reason != 2) {
  212. stopSeekbarTimer();
  213. }
  214. }
  215. // ============================= //
  216.  
  217. function on_playback_new_track() {
  218. sliderEventHandler();
  219. }
  220. // ============================= //
  221.  
  222. function on_playlist_items_added() {
  223.  
  224. window.Repaint();
  225.  
  226. }
  227. // ============================= //
  228.  
  229. function on_playlist_items_removed(playlist, new_count) {
  230.  
  231. if (!fb.IsPlaying && !new_count) {
  232. window.Repaint();
  233. }
  234.  
  235. }
  236. // ============================= //
  237.  
  238. function on_playlist_items_selection_change() {
  239.  
  240. if (!fb.IsPlaying) {
  241. window.Repaint();
  242. }
  243. }
  244. // ============================= //
  245.  
  246. function on_volume_change(val) {
  247.  
  248. sliderEventHandler(val);
  249.  
  250. if (val == -100) {
  251.  
  252. b[2].img = btnImg.Muted;
  253. b[2].repaint();
  254.  
  255. } else if (b[2].img == btnImg.Muted) {
  256.  
  257. b[2].img = btnImg.Mute;
  258. b[2].repaint();
  259.  
  260. }
  261.  
  262. }
  263. // ============================= //
  264.  
  265. function on_playback_order_changed(id) {
  266.  
  267. for (var i in playbackOrder) {
  268.  
  269. if (id == playbackOrder[i]) {
  270.  
  271. break;
  272.  
  273. }
  274.  
  275. }
  276. if (id == playbackOrder.RepeatPlaylist) b[0].img = btnImg.RepeatPlaylist;
  277. else if (id == playbackOrder.RepeatTrack) b[0].img = btnImg.Repeat1;
  278. else b[0].img = btnImg.Repeat;
  279.  
  280. if (id == playbackOrder.ShuffleTracks) b[1].img = btnImg.ShuffleTracks;
  281. else b[1].img = btnImg.Shuffle;
  282.  
  283. b[0].repaint();
  284. b[1].repaint();
  285.  
  286. }
  287. // ============================= //
  288.  
  289. function createButtonImages() {
  290.  
  291. var fontGuifx = gdi.font("Guifx v2 Transports", 18, 0);
  292. var fontMarlett = gdi.font("Marlett", 13, 0);
  293. var fontSegoeUi = gdi.font("Segoe Ui", 12, 0);
  294. var c = [250, 250, 250];
  295. var btn = {
  296.  
  297. Repeat: {
  298. ico: Guifx.Repeat,
  299. font: fontGuifx,
  300. id: "playback",
  301. w: 24,
  302. h: 24,
  303. cNormal: RGBA(c[0], c[1], c[2], 35),
  304. cHover: RGBA(c[0], c[1], c[2], 155),
  305. cDown: RGBA(c[0], c[1], c[2], 105)
  306. },
  307. Repeat1: {
  308. ico: Guifx.Repeat1,
  309. font: fontGuifx,
  310. id: "playback",
  311. w: 24,
  312. h: 24,
  313. cNormal: RGBA(222, 12, 122, 155),
  314. cHover: RGBA(222, 12, 122, 225),
  315. cDown: RGBA(222, 12, 122, 105)
  316. },
  317. RepeatPlaylist: {
  318. ico: Guifx.Repeat,
  319. font: fontGuifx,
  320. id: "playback",
  321. w: 24,
  322. h: 24,
  323. cNormal: RGBA(222, 12, 122, 155),
  324. cHover: RGBA(222, 12, 122, 225),
  325. cDown: RGBA(222, 12, 122, 105)
  326. },
  327. Shuffle: {
  328. ico: Guifx.Shuffle,
  329. font: fontGuifx,
  330. id: "playback",
  331. w: 24,
  332. h: 24,
  333. cNormal: RGBA(c[0], c[1], c[2], 35),
  334. cHover: RGBA(c[0], c[1], c[2], 155),
  335. cDown: RGBA(c[0], c[1], c[2], 105)
  336. },
  337. ShuffleTracks: {
  338. ico: Guifx.Shuffle,
  339. font: fontGuifx,
  340. id: "playback",
  341. w: 24,
  342. h: 24,
  343. cNormal: RGBA(222, 12, 122, 155),
  344. cHover: RGBA(222, 12, 122, 225),
  345. cDown: RGBA(222, 12, 122, 105)
  346. },
  347. Mute: {
  348. ico: Guifx.Mute2,
  349. font: gdi.font("Guifx v2 Transports", 22, 0),
  350. id: "playback",
  351. w: 24,
  352. h: 24,
  353. cNormal: RGBA(c[0], c[1], c[2], 35),
  354. cHover: RGBA(c[0], c[1], c[2], 155),
  355. cDown: RGBA(c[0], c[1], c[2], 105)
  356. },
  357. Muted: {
  358. ico: Guifx.Mute2,
  359. font: gdi.font("Guifx v2 Transports", 22, 0),
  360. id: "playback",
  361. w: 24,
  362. h: 24,
  363. cNormal: RGBA(222, 12, 122, 155),
  364. cHover: RGBA(222, 12, 122, 225),
  365. cDown: RGBA(222, 12, 122, 105)
  366. }
  367.  
  368. };
  369.  
  370. btnImg = [];
  371.  
  372. for (var i in btn) {
  373.  
  374. var w = btn[i].w,
  375. h = btn[i].h,
  376. lw = 2;
  377.  
  378. var stateImages = []; //0=normal, 1=hover, 2=down;
  379.  
  380. for (var s = 0; s <= 2; s++) {
  381.  
  382. color = btn[i].cNormal;
  383.  
  384. if (s == 1) {
  385. color = btn[i].cHover;
  386. } else if (s == 2) {
  387. color = btn[i].cDown;
  388. }
  389.  
  390. var img = gdi.CreateImage(w, h);
  391. g = img.GetGraphics();
  392. g.SetSmoothingMode(2);
  393. g.SetTextRenderingHint(5);
  394.  
  395. //--->
  396. g.FillSolidRect(0, 0, w, h, RGB(25, 25, 25));
  397. g.DrawString(btn[i].ico, btn[i].font, color, 0, 0, w, h, StringFormat(1, 1));
  398. //g.DrawEllipse(Math.floor(lw / 2) + 1, Math.floor(lw / 2) + 1, w - lw - 2, h - lw - 2, lw, color);
  399.  
  400. //--->
  401.  
  402. img.ReleaseGraphics(g);
  403. stateImages[s] = img;
  404.  
  405. }
  406.  
  407. btnImg[i] = stateImages;
  408.  
  409. }
  410.  
  411. }
  412. // ============================= //
  413.  
  414. function on_key_down(vkey) {
  415.  
  416. var CtrlKeyPressed = utils.IsKeyPressed(VK_CONTROL);
  417. var ShiftKeyPressed = utils.IsKeyPressed(VK_SHIFT);
  418.  
  419. if (CtrlKeyPressed && vkey == VK_KEY_P) {
  420. fb.RunMainMenuCommand("File/Preferences");
  421. }
  422. }
  423. // ============================= //
  424.  
  425. function on_mouse_rbtn_up(x, y) {
  426.  
  427. var cpm = window.CreatePopupMenu();
  428.  
  429. cpm.AppendMenuItem(MF_STRING, 1, "Show slider tooltip");
  430. cpm.CheckMenuItem(1, showTooltip);
  431. cpm.AppendMenuItem(MF_STRING, 2, "Show time remaining");
  432. cpm.CheckMenuItem(2, showTimeRemaining);
  433. cpm.AppendMenuSeparator();
  434. cpm.AppendMenuItem(MF_STRING, 10, "Console");
  435. cpm.AppendMenuItem(MF_STRING, 11, "Restart");
  436. cpm.AppendMenuItem(MF_STRING, 12, "Preferences...");
  437. if (utils.IsKeyPressed(VK_SHIFT)) {
  438. cpm.AppendMenuSeparator();
  439. cpm.AppendMenuItem(safeMode ? MF_GRAYED : MF_STRING, 13, "Configure script...");
  440. cpm.AppendMenuItem(MF_STRING, 14, "Configure...");
  441. cpm.AppendMenuItem(MF_STRING, 15, "Properties...");
  442. }
  443.  
  444. var id = cpm.TrackPopupMenu(x, y);
  445. switch (id) {
  446.  
  447. case 1:
  448. showTooltip = !showTooltip;
  449. window.SetProperty("Show Slider Tooltip", showTooltip);
  450. break;
  451. case 2:
  452. showTimeRemaining = !showTimeRemaining;
  453. window.SetProperty("Show Time Remaining", showTimeRemaining);
  454. window.Repaint();
  455. break;
  456. case 10:
  457. fb.ShowConsole();
  458. break;
  459. case 11:
  460. fb.RunMainMenuCommand("File/Restart");
  461. break;
  462. case 12:
  463. fb.RunMainMenuCommand("File/Preferences");
  464. break;
  465. case 13:
  466. try {
  467.  
  468. WshShell.Run("notepad.exe themes\\" + themeName + "\\Scripts\\Panel_Bottom.js");
  469.  
  470. } catch (e) {
  471. fb.trace(e)
  472. };
  473. break;
  474. case 14:
  475. window.ShowConfigure();
  476. break;
  477. case 15:
  478. window.ShowProperties();
  479. break;
  480.  
  481.  
  482. }
  483.  
  484. cpm.Dispose();
  485. return true;
  486. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement