Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==PREPROCESSOR==
- // @name "Lyrics Reader"
- // @version "2.1"
- // @author "Br3tt(Changed by Mire777)"
- // @feature "dragdrop"
- // @import "%fb2k_profile_path%skins\xc4\scripts\Common.js"
- // @import "%fb2k_profile_path%skins\xc4\scripts\Codepages.js"
- // ==/PREPROCESSOR==
- // Paths
- var lyrics_dir1 = fb.Titleformat("$replace($replace(%path%,%filename_ext%,),\,\\)");
- var fbfolder = (fb.ProfilePath + "lyrics");
- var Lyrics_path = window.GetProperty("Lyrics folder", fbfolder);
- var lyrics_dir2 =(Lyrics_path + "\\");
- /*
- ===========================================================================================================
- Lyrics 2.0 (build 20110507.1850) - a WSH lyrics module by Br3tt
- - This WSH script get lyrics from TAG first then from local file in Music folder then in foobar2000\lyrics\ and it displays them (scrolling+sync)
- - It handles TXT and LRC format (sync handled), but not the LRC Enhanced format (translated to simple LRC format)
- - exotics timestamps are now handled (like [9:99], [99:99.999], [9:99.999], [99:99:999] ...)
- - filenames supported are : <%artist%> -<%title%>.lrc (or .txt) AND <%artist%> - <%title%>.lrc (or .txt)
- - Comments, Blank lines (no timestamp) and Info lines (ar:, ti, ...) are ignored.
- - Manual Scrolling possible with the mousewheel (double click on the panel to re-center on the active line)
- - Requirements :
- 1) foobar2000
- 2) WSH Panel Mod component 1.4.2+
- 3) this javascript in a WSH panel mod instance
- 4) Optional: a lyrics grabber component (i.e: Lyrics Show Panel by hidding the panel, foo_lyricsDB, ...)
- - Some settings are available by using the panel Properties (right click on WSH panel -> Properties)
- - This script don't make any changes to your files and write nothing on your system, except the creation of the folder foobar2000/lyrics if not found
- ===========================================================================================================
- */
- // ================================================== CUI Colours
- var g_instancetype = window.InstanceType;
- var c01, c02, c03, c04, c05, c06;
- var TXT_GLOW_COLOUR;
- var BG_FOCUS_COLOUR;
- var TXT_NORMAL_COLOUR;
- var TXT_FOCUS_COLOUR;
- function get_colors() {
- if (g_instancetype == 0) { // CUI
- c01 = window.GetColorCUI(ColorTypeCUI.background);
- c02 = window.GetColorCUI(ColorTypeCUI.selection_background);
- c03 = window.GetColorCUI(ColorTypeCUI.text);
- c04 = window.GetColorCUI(ColorTypeCUI.selection_text);
- c05 = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);
- c06 = window.GetColorCUI(ColorTypeCUI.inactive_selection_background);
- TXT_GLOW_COLOUR = c01;
- BG_FOCUS_COLOUR = c01;
- TXT_NORMAL_COLOUR = c03;
- TXT_FOCUS_COLOUR = c05;
- }
- }
- get_colors();
- function on_colors_changed() {
- get_colors();
- on_init();
- }
- // ================================================== CUI Colours
- var cpt=0;
- // ================================================/ Properties
- var FONT_NAME = window.GetProperty("Font name", "segoe ui");
- var FONT_SIZE = window.GetProperty("Font size", 12);
- var FONT_STYLE = window.GetProperty("Font style", 3);
- var LINE_HEIGHT = window.GetProperty("Default Line height", 24);
- var SCROLL_STEP = window.GetProperty("Scrolling speed [01:10]", 8);
- var TEXT_SHADOW = window.GetProperty("Show Text shadow", true);
- var TEXT_GLOW = window.GetProperty("Glow Text enabled", false);
- //var BG_DRAW = window.GetProperty("Background enabled", false);
- var BG_DRAW = false;
- //var BG_DEFAULT_COLOUR = window.GetProperty("Background colour", "RGB(0, 0, 0);");
- var BG_DEFAULT_COLOUR = RGB(0, 0, 0);
- //var DITHER = window.GetProperty("Show Borders Shadow", true);
- var DITHER = true;
- var H_PADDING = window.GetProperty("Horizontal padding", 15);
- var TXT_ALIGN = window.GetProperty("Text alignment (left/center/right)", "center");
- var IMG_TYPE = window.GetProperty("Image Type [0:1]", 0);
- var ALBUM_IMG_ASPECT = window.GetProperty("Album Image Aspect [0:2]", 2);
- var ARTIST_IMG_ASPECT = window.GetProperty("Artist Image Aspect [0:2]", 1);
- //var GET_ENCODING = window.GetProperty("Get Encoding enabled", true);
- var GET_ENCODING = true;
- var DEBUG = false;
- var DEFAULT_OFFSET = 29;
- //=================================================// Read Options
- var opt_show_lyrics = true;
- var REFLECT_HEIGHT = 0;
- //=================================================// Images
- var icon_artist_img;
- var icon_album_img;
- // ================================================/ Constants
- var PLAYTIMER_VALUE = 10; // do not modify this value
- //{{
- // new objects
- sentence = function () {
- this.timer = 0;
- this.text = "";
- this.total_lines = 0;
- this.ante_lines = 0;
- }
- //}}
- function get_Cx(delay) {
- var k = g_panelopt_left + Math.floor(g_panelopt_scale_w/2);
- var i = delay/20;
- var x = k + i;
- return x;
- }
- function get_delay(x) {
- var k = g_panelopt_left + Math.floor(g_panelopt_scale_w/2);
- var delay = x<k ? (k-x)*-1 : x-k;
- return delay*20;
- }
- // ================================================/ TF
- var len = fb.Titleformat("%length%");
- var elap = fb.TitleFormat("%playback_time%");
- var remain = fb.TitleFormat("%playback_time_remaining%");
- var len_seconds = fb.Titleformat("%length_seconds%");
- var elap_seconds = fb.TitleFormat("%playback_time_seconds%");
- var remain_seconds = fb.Titleformat("%playback_time_remaining_seconds%");
- var artist = fb.Titleformat("$if2(%artist%,$if2(%band%,'N/A'))");
- var title = fb.Titleformat("%title%");
- var artist2 = fb.Titleformat("$replace($if2(%artist%,$if2(%band%,'N/A')),:,_,;,_)");
- var title2 = fb.Titleformat("$replace(%title%,:,_,;,_)");
- var lyrics = fb.TitleFormat("$replace([$if2(%LYRICS%,$if2(%LYRIC%,$if2(%UNSYNCED LYRICS%,%UNSYNCED LYRIC%)))], ,, ,)");
- var tf_path = fb.TitleFormat("$left(%_path_raw%,4)");
- // ================================================/ Globals
- var mybutton = Array(new button, new button, new button, new button, new button);
- var mouse_x = -1;
- var mouse_y = -1;
- var g_font = gdi.Font(FONT_NAME, FONT_SIZE, FONT_STYLE);
- var g_font_small = gdi.Font("segoe ui", 9, 0);
- var g_panelopt_font = gdi.Font("segoe ui", 10, 0);
- var g_playtimer;
- var g_panelopt_delay=0;
- var Cx;
- var Cdrag=false;
- var Cdrag_x;
- var g_panelopt_timer;
- var g_panelopt_waiter;
- var g_panelopt_sens;
- var g_panelopt_h = 42;
- var g_panelopt_y = -42;
- var g_panelopt_left = 48;
- var g_panelopt_right = 44;
- var g_panelopt_scale_w;
- var g_timer_abs;
- var g_metadb;
- var ww = 0, wh = 0;
- var g_fso = new ActiveXObject("Scripting.FileSystemObject");
- var g_file = null;
- var g_tab = Array();
- var g_codepage;
- var g_scroll=0;
- var g_lyrics_path;
- var g_lyrics_filename;
- var g_lyrics_status;
- var focus=0;
- var focus_next=0;
- var g_bg_colour;
- var g_ovbg_highlightcolour;
- var g_txt_normalcolour;
- var g_txt_highlightcolour;
- var g_txt_shadowcolour;
- var g_txt_glowcolour;
- var g_dither_shadowcolour;
- var centiemes = 0;
- var g_is_scrolling = false;
- var g_multi_balise = false;
- var g_balise_total;
- var g_balise_char_offset = 10;
- var g_tab_length;
- var g_txt_align;
- var midpoint;
- var pos;
- var g_track_type;
- var g_path;
- // front cover
- var is_art;
- var is_embedded;
- var is_stream;
- var frontcover;
- var cover_inner_padding = 0;
- var img_info = {orient: 0, cut: 0, cut_offset: 0, ratio: 0, x: 0, y: 0, w: 0, h: 0};
- // START
- function on_init() {
- ww = window.Width;
- wh = window.Height;
- refresh_images();
- g_panelopt_scale_w = ww - g_panelopt_left - g_panelopt_right;
- on_item_focus_change();
- midpoint = (wh-REFLECT_HEIGHT) / 2 - LINE_HEIGHT / 2;
- // colour definitions
- g_bg_colour = eval(BG_DEFAULT_COLOUR);
- g_ovbg_highlightcolour = eval(BG_FOCUS_COLOUR);
- g_txt_normalcolour = eval(TXT_NORMAL_COLOUR);
- g_txt_highlightcolour = eval(TXT_FOCUS_COLOUR);
- g_txt_shadowcolour = c01&0x66ffffff;
- g_txt_glowcolour = eval(TXT_GLOW_COLOUR);
- g_dither_shadowcolour = RGBA(000, 000, 000, 200);
- }
- on_init();
- function on_size() {
- window.MinWidth = 80;
- window.MinHeight = 40;
- ww = window.Width;
- wh = window.Height;
- g_panelopt_scale_w = ww - g_panelopt_left - g_panelopt_right;
- midpoint = (wh-REFLECT_HEIGHT) / 2 - LINE_HEIGHT / 2;
- reset_lyrics();
- }
- function reset_lyrics() {
- var k, delta;
- midpoint = (wh-REFLECT_HEIGHT) / 2 - LINE_HEIGHT / 2;
- g_playtimer && window.KillTimer(g_playtimer);
- if(fb.IsPlaying||fb.IsPaused) {
- g_scroll=0;
- g_is_scrolling = false;
- get_lyrics();
- change_focus();
- k = g_tab[focus].ante_lines * LINE_HEIGHT;
- if(g_lyrics_status>0) {
- pos = midpoint - k;
- g_playtimer = window.CreateTimerInterval(PLAYTIMER_VALUE);
- g_timer_abs = 4;
- } else {
- delta = (g_tab[g_tab.length-1].ante_lines + g_tab[g_tab.length-1].total_lines);
- pos = Math.round(((wh-REFLECT_HEIGHT) / 2) - (delta * LINE_HEIGHT / 2));
- }
- }
- }
- function on_paint(gr) {
- var i, j;
- var aspect;
- if(REFLECT_HEIGHT>=0) {
- var main_img = gdi.CreateImage(ww, wh-REFLECT_HEIGHT);
- var gp = main_img.GetGraphics();
- if(opt_show_lyrics) {
- //gp.FillSolidRect(0, 0, ww, ww, RGBA(0,0,0,075));
- } else {
- //gp.FillSolidRect(0, 0, ww, ww, RGBA(0,0,0,020));
- }
- if(fb.IsPlaying||fb.IsPaused) {
- gp.SetTextRenderingHint(3);
- opt_show_lyrics && show_lyrics(gp, g_tab, pos);
- }
- main_img.ReleaseGraphics(gp);
- gr.DrawImage(main_img, 0, 0, main_img.Width, main_img.Height, 0, 0, main_img.Width, main_img.Height, 0, 255);
- //gr.DrawImage(main_img, main_img.Width, (wh-REFLECT_HEIGHT)+1, -1*main_img.Width, main_img.Height*95/100, 0, 0, main_img.Width, main_img.Height,180,245);
- //gr.FillGradRect(0, wh-REFLECT_HEIGHT+1, ww, REFLECT_HEIGHT+1, 90, RGBA(15,15,15,080), RGBA(0,0,0,255));
- CollectGarbage();
- } else {
- if(fb.IsPlaying||fb.IsPaused) {
- gr.SetTextRenderingHint(3);
- opt_show_lyrics && show_lyrics(gr, g_tab, pos);
- }
- }
- // panel option (offset adjust)
- // ============================
- if(opt_show_lyrics) {
- if(fb.IsPlaying||fb.IsPaused) {
- var y_offset = 0;
- } else {
- var y_offset = 18;
- }
- } else {
- var y_offset = 18;
- }
- if(g_track_type!=3 && g_panelopt_y+y_offset>g_panelopt_h*-1) {
- gr.SetSmoothingMode(2);
- gr.SetTextRenderingHint(3);
- gr.FillRoundRect(5, g_panelopt_y-10, ww-10, g_panelopt_h+9, 5, 5, RGBA(10, 010, 010, 210));
- gr.DrawRoundRect(6, g_panelopt_y-10, ww-12, g_panelopt_h+8, 5, 5, 1.0, RGBA(255, 255, 255, 040));
- gr.DrawRoundRect(5, g_panelopt_y-10, ww-10, g_panelopt_h+9, 5, 5, 1.0, RGBA(0, 0, 0, 230));
- // drawing the scale for offset adjustement
- switch(g_lyrics_status) {
- case 0:
- gr.gdiDrawText("> NO LYRICS FOUND FOR THIS TRACK", g_panelopt_font, RGBA(200, 200, 200, 255), 12, g_panelopt_y+3-y_offset, ww-10, 16, DT_LEFT | DT_TOP);
- break;
- case 1:
- gr.gdiDrawText("OFFSET", g_panelopt_font, RGBA(200, 200, 200, 255), 12, g_panelopt_y+3-y_offset, ww-10, 16, DT_LEFT | DT_TOP);
- gr.SetSmoothingMode(0);
- gr.DrawLine(g_panelopt_left+2, g_panelopt_y+9-y_offset, ww-g_panelopt_right+2, g_panelopt_y+9-y_offset, 1.0, RGBA(150, 150, 150, 255));
- gr.DrawLine(g_panelopt_left+2, g_panelopt_y+6-y_offset, g_panelopt_left+2, g_panelopt_y+12-y_offset, 1.0, RGBA(150, 150, 150, 255));
- gr.DrawLine(g_panelopt_left+2+g_panelopt_scale_w/2, g_panelopt_y+6-y_offset, g_panelopt_left+2+g_panelopt_scale_w/2, g_panelopt_y+12-y_offset, 1.0, RGBA(150, 150, 150, 255));
- gr.DrawLine(ww-g_panelopt_right+2, g_panelopt_y+6-y_offset, ww-g_panelopt_right+2, g_panelopt_y+12-y_offset, 1.0, RGBA(150, 150, 150, 255));
- Cx = get_Cx(g_panelopt_delay);
- gr.DrawLine(Cx+2, g_panelopt_y+5-y_offset, Cx+2, g_panelopt_y+14-y_offset, 3.0, Cdrag?RGBA(255, 255, 255, 255):RGBA(230, 230, 230, 255));
- gr.gdiDrawText(g_panelopt_delay/100+" s", g_panelopt_font, RGBA(200, 200, 200, 255), ww-g_panelopt_right+3, g_panelopt_y+3-y_offset, g_panelopt_right-14, 16, DT_RIGHT | DT_TOP);
- break;
- case 2:
- gr.gdiDrawText("> UNSYNCED LYRICS", g_panelopt_font, RGBA(200, 200, 200, 255), 12, g_panelopt_y+3-y_offset, ww-10, 16, DT_LEFT | DT_TOP);
- break;
- }
- gr.SetSmoothingMode(0);
- gr.FillSolidRect(12, g_panelopt_y+18-y_offset, ww-24, 1, RGBA(255,255,255,40));
- gr.FillSolidRect(12, g_panelopt_y+17-y_offset, ww-24, 1, RGBA(0,0,0,170));
- // draw buttons (option panel only)
- if(IMG_TYPE==0) {
- aspect = ALBUM_IMG_ASPECT;
- } else {
- aspect = ARTIST_IMG_ASPECT;
- }
- for (i = 0; i < mybutton.length; i++) {
- switch (i) {
- case 0:
- // panelopt album icon
- mybutton[i].draw(gr, 0, g_panelopt_y+22-y_offset, IMG_TYPE==0?000:255, "");
- break;
- case 1:
- // panelopt artist icon
- mybutton[i].draw(gr, 30, g_panelopt_y+22-y_offset, IMG_TYPE!=0?000:255, "");
- break;
- case 2:
- // panelopt aspect icon : crop
- mybutton[i].draw(gr, ww-65, g_panelopt_y+23-y_offset, aspect==0?000:255, "");
- break;
- case 3:
- // panelopt aspect icon : center
- mybutton[i].draw(gr, ww-44, g_panelopt_y+23-y_offset, aspect==1?000:255, "");
- break;
- case 4:
- // panelopt aspect icon : fill
- mybutton[i].draw(gr, ww-25, g_panelopt_y+23-y_offset, aspect==2?000:255, "");
- break;
- }
- }
- }
- // encoding used
- if(opt_show_lyrics) {
- gr.SetTextRenderingHint(3);
- if(GET_ENCODING && g_lyrics_status>0 && g_codepage!=0) {
- gr.DrawString("codepage: "+g_codepage, g_font_small, RGBA(000,000,000,100), 2, wh-14, ww, 12, lc_stringformat);
- }
- }
- }
- function on_mouse_lbtn_dblclk(x, y, mask) {
- // reset position
- reset_lyrics();
- }
- function on_mouse_lbtn_down(x, y) {
- var i;
- if(x>g_panelopt_left && x<ww-g_panelopt_right && y>0 && y<18) {
- Cdrag = true;
- Cx=x;
- g_panelopt_delay = get_delay(Cx);
- window.RepaintRect(0, 0, ww, g_panelopt_h+g_panelopt_y+3);
- } else {
- Cdrag = false;
- }
- // buttons
- for (i = 0; i < mybutton.length; i++) {
- mybutton[i].checkstate("down", x, y, i);
- }
- }
- function on_mouse_lbtn_up(x, y) {
- var i;
- if(Cdrag) reset_lyrics();
- Cdrag = false;
- // buttons
- for (i = 0; i < mybutton.length; i++) {
- switch (i) {
- case 0:
- if (mybutton[i].checkstate("up", x, y)== mybutton[i].ButtonStates.hover) {
- IMG_TYPE = 0;
- window.SetProperty("Image Type [0:1]", 0);
- }
- break;
- case 1:
- if (mybutton[i].checkstate("up", x, y)== mybutton[i].ButtonStates.hover) {
- IMG_TYPE = 1;
- window.SetProperty("Image Type [0:1]", 1);
- }
- break;
- case 2:
- if (mybutton[i].checkstate("up", x, y)== mybutton[i].ButtonStates.hover) {
- if(IMG_TYPE==0) {
- ALBUM_IMG_ASPECT = 0;
- window.SetProperty("Album Image Aspect [0:2]", 0);
- } else {
- ARTIST_IMG_ASPECT = 0;
- window.SetProperty("Artist Image Aspect [0:2]", 0);
- }
- }
- break;
- case 3:
- if (mybutton[i].checkstate("up", x, y)== mybutton[i].ButtonStates.hover) {
- if(IMG_TYPE==0) {
- ALBUM_IMG_ASPECT = 1;
- window.SetProperty("Album Image Aspect [0:2]", 1);
- } else {
- ARTIST_IMG_ASPECT = 1;
- window.SetProperty("Artist Image Aspect [0:2]", 1);
- }
- }
- break;
- case 4:
- if (mybutton[i].checkstate("up", x, y)== mybutton[i].ButtonStates.hover) {
- if(IMG_TYPE==0) {
- ALBUM_IMG_ASPECT = 2;
- window.SetProperty("Album Image Aspect [0:2]", 2);
- } else {
- ARTIST_IMG_ASPECT = 2;
- window.SetProperty("Artist Image Aspect [0:2]", 2);
- }
- }
- break;
- }
- }
- }
- function on_mouse_move(x, y) {
- mouse_x = x;
- mouse_y = y;
- // Option panel (adjust offset) animation
- /*
- if(y<=g_panelopt_h) {
- if(g_panelopt_y==(g_panelopt_h * -1)) {
- if(!g_panelopt_waiter) {
- g_panelopt_waiter = window.CreateTimerInterval(500);
- }
- } else {
- if(!g_panelopt_waiter) {
- g_panelopt_waiter = window.CreateTimerInterval(1);
- }
- }
- } else if (y>g_panelopt_h && g_panelopt_y>g_panelopt_h * -1){
- g_panelopt_sens = -1;
- if(!g_panelopt_timer) {
- g_panelopt_timer = window.CreateTimerInterval(40);
- }
- }
- // offset cursor dragging
- if(Cdrag) {
- if(x>g_panelopt_left && x<ww-g_panelopt_right && y<18) {
- Cx=x;
- g_panelopt_delay = get_delay(Cx);
- window.RepaintRect(0, 0, ww, g_panelopt_h+g_panelopt_y+3);
- }
- } else if (g_panelopt_y>g_panelopt_h * -1) {
- window.RepaintRect(0, 0, ww, g_panelopt_h+g_panelopt_y+3);
- }
- */
- // buttons
- hand=false;
- for(i=0;i<mybutton.length;i++) {
- mybutton[i].checkstate("move", x, y, i);
- if(mybutton[i].is_hover) hand=true;
- }
- // Mouse Cursor
- window.SetCursor(hand? IDC_HAND : IDC_ARROW);
- }
- function on_mouse_wheel(delta) {
- if(opt_show_lyrics && g_lyrics_status>0) {
- if(delta>0) {
- pos = (pos>=midpoint)?pos:pos + LINE_HEIGHT;
- } else {
- pos = (pos<=(wh/2 - g_tab_length*LINE_HEIGHT))?pos:pos - LINE_HEIGHT;
- }
- window.Repaint();
- }
- }
- function on_mouse_leave() {
- var i;
- mouse_x = -1;
- mouse_y = -1;
- if (g_panelopt_y>g_panelopt_h * -1) {
- g_panelopt_sens = -1;
- if(!g_panelopt_timer) {
- g_panelopt_timer = window.CreateTimerInterval(40);
- }
- }
- // buttons
- for (i = 0; i < mybutton.length; i++) {
- mybutton[i].checkstate("leave", 0, 0, i);
- }
- }
- function on_focus(is_focused) {
- if(!is_focused){
- mouse_x = -1;
- mouse_y = -1;
- if (g_panelopt_y>g_panelopt_h * -1) {
- g_panelopt_sens = -1;
- if(!g_panelopt_timer) {
- g_panelopt_timer = window.CreateTimerInterval(40);
- }
- }
- }
- }
- function on_playback_time(time) {
- //******************************Mire777 Script -(Force SAVE OPTION!)********************
- {
- //Check if lyric has been found
- if(g_lyrics_status==0)
- if( fb.TitleFormat( "%lyric_exists%" ).Eval() )
- //If Lyrics found, save it!
- fb.RunMainMenuCommand("View/Lyrics Show 3/Save");
- else
- {
- }
- }
- //**************************************************************************************
- // at each new seconde, centiemes is reset to 0 (Increment on timer every 100ms)
- centiemes = 0;
- if(g_lyrics_status==0) {
- //next line add wait option for display lyrics, else show lyrics NOW!..
- //if(elap_seconds.Eval()==7)
- {
- reset_lyrics();
- window.Repaint();
- }
- }
- if (g_panelopt_y>g_panelopt_h * -1) {
- g_panelopt_sens = -1;
- if(!g_panelopt_timer) {
- g_panelopt_timer = window.CreateTimerInterval(40);
- }
- }
- }
- function on_playback_new_track(info) {
- g_panelopt_delay=0;
- g_playtimer && window.KillTimer(g_playtimer);
- pos=0;
- g_scroll = 0;
- g_is_scrolling = false;
- on_item_focus_change();
- change_focus();
- if(g_lyrics_status>0) {
- g_playtimer = window.CreateTimerInterval(PLAYTIMER_VALUE);
- g_timer_abs = 4;
- }
- }
- function on_playback_seek(time) {
- var k;
- if(g_lyrics_status>0) {
- reset_lyrics();
- }
- }
- function on_playback_stop(reason) {
- g_playtimer && window.KillTimer(g_playtimer);
- g_playtimer = false;
- if(reason==0) {
- // user Stop
- on_item_focus_change();
- }
- }
- function on_timer(id) {
- var i;
- var t1 = elap_seconds.Eval() * 100 + centiemes;
- var t2 = len_seconds.Eval() * 100;
- var p1, p2;
- // buttons
- for (i = 0; i < mybutton.length; i++) {
- mybutton[i].ontimer(id);
- }
- if(g_panelopt_waiter) {
- if(g_panelopt_waiter.ID == id) {
- if(mouse_y>0 && mouse_y<g_panelopt_h) {
- g_panelopt_sens = 1;
- if(!g_panelopt_timer && g_panelopt_y<0) {
- g_panelopt_timer = window.CreateTimerInterval(40);
- }
- if(opt_show_lyrics) {
- if(fb.IsPlaying||fb.IsPaused) {
- g_panelopt_h = 42;
- } else {
- g_panelopt_h = 42 - 18;
- }
- } else {
- g_panelopt_h = 42 - 18;
- }
- }
- window.KillTimer(g_panelopt_waiter);
- g_panelopt_waiter = false;
- }
- }
- if(t1>t2-100) {
- g_playtimer && window.KillTimer(g_playtimer);
- }
- if(g_panelopt_timer) {
- if(g_panelopt_timer.ID == id) {
- var po_step = 3;
- if(g_panelopt_sens>0) {
- if(g_panelopt_y<0) {
- g_panelopt_y = g_panelopt_y<=po_step*-1?g_panelopt_y+po_step:0;
- } else {
- window.KillTimer(g_panelopt_timer);
- g_panelopt_timer = false;
- }
- } else {
- if(g_panelopt_y>g_panelopt_h * -1) {
- g_panelopt_y = g_panelopt_y>=(g_panelopt_h*-1)+po_step?g_panelopt_y-po_step:(g_panelopt_h*-1);
- } else {
- window.KillTimer(g_panelopt_timer);
- g_panelopt_timer = false;
- }
- }
- window.RepaintRect(0, 0, ww, g_panelopt_h+g_panelopt_y+3);
- }
- } else {
- if(g_playtimer && g_lyrics_status>0) {
- if(g_playtimer.ID == id) {
- if(!g_is_scrolling && t1>=g_tab[focus_next].timer) {
- p1 = g_tab[focus].ante_lines*LINE_HEIGHT;
- p2 = g_tab[focus_next].ante_lines*LINE_HEIGHT;
- g_scroll = (p2 - p1);
- change_focus();
- g_is_scrolling = true;
- }
- g_timer_abs--;
- if (g_scroll>0) {
- pos -= g_scroll<SCROLL_STEP/10?g_scroll:SCROLL_STEP/10;
- g_scroll -= g_scroll<SCROLL_STEP/10?g_scroll:SCROLL_STEP/10;
- if(g_timer_abs<=1) {
- g_timer_abs = 4;
- if(opt_show_lyrics) window.Repaint();
- }
- } else {
- g_timer_abs = 4;
- g_is_scrolling = false;
- }
- centiemes = (centiemes>98)?0:(centiemes+1);
- }
- }
- }
- }
- function show_lyrics(gr, tab, posy) {
- var i, k, text_colour;
- switch(TXT_ALIGN.toUpperCase()) {
- case "LEFT":
- g_txt_align = lc_stringformat;
- break;
- case "CENTER":
- g_txt_align = cc_stringformat;
- break;
- case "RIGHT":
- g_txt_align = rc_stringformat;
- break;
- default:
- g_txt_align = cc_stringformat;
- }
- for(i=0;i<tab.length;i++) {
- if(Math.round(posy)>=(LINE_HEIGHT*-4) && Math.round(posy)<wh) {
- if(i==focus && g_lyrics_status==1) {
- text_colour = g_txt_highlightcolour;
- shadow_colour = c06;
- } else {
- if(g_lyrics_status==1) {
- text_colour = g_txt_normalcolour;
- shadow_colour = c01;
- } else {
- text_colour = g_txt_highlightcolour;
- shadow_colour = c06;
- }
- }
- if(g_lyrics_status>0) {
- if(i==focus && tab[i].text.length>2 && g_lyrics_status==1) {
- gr.FillGradRect(0, Math.floor(posy), ww, (tab[i].total_lines*LINE_HEIGHT), 00, RGBA(0,0,0,10), RGBA(0,0,0,90), 0.5);
- }
- }
- TEXT_SHADOW && gr.DrawString(tab[i].text, g_font, shadow_colour&0x66ffffff, H_PADDING+0, Math.floor(posy)-1+1, ww-H_PADDING*2, (tab[i].total_lines*LINE_HEIGHT), g_txt_align);
- TEXT_GLOW && gr.DrawString(tab[i].text, g_font, g_txt_glowcolour, H_PADDING-1, Math.floor(posy)-1, ww-H_PADDING*2, (tab[i].total_lines*LINE_HEIGHT), g_txt_align);
- TEXT_GLOW && gr.DrawString(tab[i].text, g_font, g_txt_glowcolour, H_PADDING+1, Math.floor(posy)-1, ww-H_PADDING*2, (tab[i].total_lines*LINE_HEIGHT), g_txt_align);
- TEXT_GLOW && gr.DrawString(tab[i].text, g_font, g_txt_glowcolour, H_PADDING, Math.floor(posy)-1-1, ww-H_PADDING*2, (tab[i].total_lines*LINE_HEIGHT), g_txt_align);
- TEXT_GLOW && gr.DrawString(tab[i].text, g_font, g_txt_glowcolour, H_PADDING, Math.floor(posy)-1+1, ww-H_PADDING*2, (tab[i].total_lines*LINE_HEIGHT), g_txt_align);
- gr.DrawString(tab[i].text, g_font, text_colour, H_PADDING, Math.floor(posy)-1, ww-H_PADDING*2, (tab[i].total_lines*LINE_HEIGHT), g_txt_align);
- }
- posy = Math.floor(posy+LINE_HEIGHT+((tab[i].total_lines-1)*LINE_HEIGHT));
- }
- }
- function grab_timer(t_tab) {
- var tminutes, tsecondes, tcentiemes;
- var i, k, f_sentence, b, c, delta, repeat_text;
- var tab = Array();
- for(i=0;i<t_tab.length;i++) {
- if(g_lyrics_status==1) {
- // -----------
- // sync lyrics
- // -----------
- if(IsTimestamped(t_tab[i])) {
- b = 0;
- while(t_tab[i].substring(b*10, b*10+1)=="[") {
- b++;
- }
- c = b;
- repeat_text = remove_enhanced_balises(t_tab[i].substring(c*10, t_tab[i].length));
- if(repeat_text.length==0) repeat_text = repeat_text + " ";
- for(b=0;b<c;b++) {
- f_sentence = new sentence;
- tminutes = t_tab[i].substring(1+(b*10), 3+(b*10));
- tsecondes = t_tab[i].substring(4+(b*10), 6+(b*10));
- tcentiemes = t_tab[i].substring(7+(b*10), 9+(b*10));
- f_sentence.timer = Math.round(tminutes)*60*100 + Math.round(tsecondes)*100 + Math.round(tcentiemes) - DEFAULT_OFFSET - g_panelopt_delay;
- if(f_sentence.timer<0) f_sentence.timer=0;
- f_sentence.text = repeat_text;
- tab.push(f_sentence);
- }
- }
- } else {
- // -------------
- // unsync lyrics
- // -------------
- if(IsTimestamped(t_tab[i])) {
- // if sync line in unsync lyrics, i remove timestamps in this line
- b = 0;
- while(IsTimestamped(t_tab[i].substring(b*10, b*10+10))) {
- b++;
- }
- t_tab[i] = t_tab[i].substring(b*10, t_tab[i].length);
- }
- f_sentence = new sentence;
- f_sentence.timer = 0;
- f_sentence.text = t_tab[i];
- tab.push(f_sentence);
- }
- }
- if(tab.length==0) {
- g_lyrics_status = 0;
- tab = load_track_info();
- delta = (tab[tab.length-1].ante_lines + tab[tab.length-1].total_lines);
- pos = (wh / 2) - (delta * LINE_HEIGHT / 2);
- } else {
- f_sentence = new sentence;
- f_sentence.timer = 9999999;
- f_sentence.text = "---";
- tab.push(f_sentence);
- }
- CollectGarbage();
- return calc_lines(sort_tab(tab));
- }
- function load_txt_file(filePath, fileName, codepage) {
- var str;
- if(GET_ENCODING) {
- str = utils.ReadTextFile(filePath + fileName, codepage);
- } else {
- str = utils.ReadTextFile(filePath + fileName, convertCharsetToCodepage("default"));
- }
- return str;
- }
- function load_file(filePath, fileName) {
- var i;
- var t_tab = Array();
- var str;
- g_file = open_file(filePath, fileName, ForReading);
- while(!g_file.AtEndOfStream) {
- str = g_file.ReadLine();
- // blank lines are ignored
- if(str.length>0) t_tab.push(str);
- }
- close_file(g_file);
- return grab_timer(check_lyrics_type(t_tab));
- }
- function get_encoding(filePath, fileName) {
- var i;
- var found = false;
- var str, str_light;
- var charset="";
- g_file = open_file(filePath, fileName, ForReading);
- while(!g_file.AtEndOfStream && !found) {
- str = g_file.ReadLine().toLowerCase();
- str_light = str.replace(' ','');
- str_light = str_light.replace('[','');
- str_light = str_light.replace(']','');
- if(str_light.substring(0,9) == "encoding:") {
- i = 9;
- while(str_light.substring(i,i+1)!="]" && str.charCodeAt(i)!=10 && i<str_light.length) {
- charset = charset + str_light.substring(i,i+1);
- i += 1;
- }
- found = true;
- }
- }
- close_file(g_file);
- if(found) {
- return convertCharsetToCodepage(charset);
- } else {
- return 0;
- }
- }
- function check_lyrics_type(t_tab) {
- var i;
- var count = 0;
- var ts_percent;
- var tab = Array();
- for(i=0;i<t_tab.length;i++) {
- if(IsTimestamped(t_tab[i])) {
- // format timestamps to default syntax : [99:99.99]
- tab.push(ts_analyzer(t_tab[i]));
- // count # of sync lines
- count++;
- } else {
- if(t_tab[i].length>1) tab.push(t_tab[i]);
- }
- }
- // calc percent of sync lines, if more than 50% of the total filled lines, it's sync lyrics, else, unsync lyrics!
- ts_percent = Math.round(count/tab.length*100);
- if(ts_percent>30) {
- // sync lyrics
- g_lyrics_status = 1;
- } else {
- // unsync lyrics
- g_lyrics_status = 2;
- }
- return tab;
- }
- function parse_tag(tag, delimiter) {
- var t_tab = Array();
- var i, j;
- j = 0;
- for(i=0;i<tag.length;i++) {
- if(i==tag.length-1 || tag.charCodeAt(i)==10 || (i>0 && (i<tag.length-5) && (tag.substring(i, i+1)==delimiter) && (tag.substring(i-1, i)!="]"))) {
- if(i==tag.length-1) {
- t_tab.push(tag.substring(j, i+1));
- } else {
- t_tab.push(tag.substring(j, i));
- }
- if(tag.charCodeAt(i)!=10) {
- j = i;
- } else {
- j = i+1;
- }
- }
- }
- return grab_timer(check_lyrics_type(t_tab));
- }
- function load_track_info() {
- var tab = Array(new sentence, new sentence, new sentence, new sentence);
- var count = 0;
- tab[count].text = artist.Eval();
- count++;
- tab[count].text = title.Eval();
- count++;
- tab[count].text = "(no lyric)";
- count++;
- return calc_lines(tab);
- }
- function open_file(filePath, fileName, ioMode) {
- var fileInst = null;
- var bool = file_exists(filePath + fileName);
- if(bool) {
- fileInst = g_fso.OpenTextFile(filePath + fileName, ioMode);
- }
- return fileInst;
- }
- function close_file(fileInst) {
- fileInst.Close();
- }
- function read_file(fileInst) {
- var line = fileInst.ReadLine();
- return line;
- }
- function folder_exists(folderPath) {
- var fso, bool;
- fso = new ActiveXObject("Scripting.FileSystemObject");
- bool = fso.FolderExists(folderPath);
- return bool;
- }
- function file_exists(filePath) {
- var fso, bool;
- fso = new ActiveXObject("Scripting.FileSystemObject");
- bool = fso.Fileexists(filePath);
- return bool;
- }
- function lyrics_folder_exists(folder_name) {
- var fso;
- var bool=1;
- fso = new ActiveXObject("Scripting.FileSystemObject");
- if (folder_exists(fb.ProfilePath + folder_name) == false) {
- fso.CreateFolder(fb.ProfilePath + folder_name);
- bool=0;
- }
- return bool;
- }
- function change_focus() {
- var i, j, t1;
- t1 = elap_seconds.Eval()*100+centiemes;
- if(g_lyrics_status>0) {
- // search line index just after actual timer
- for(i=focus;i<g_tab.length;i++) {
- if(g_tab[i].timer>t1) break;
- }
- focus_next=i;
- focus = (i>0)?i-1:0;
- // now i check if there are more than one line with the same timer as focus one & if found, i take it as new focus 'cause it's the first (not a blank line)
- if(focus>0) {
- for(i=0;i<focus;i++) {
- if(g_tab[i].timer==g_tab[focus].timer) {
- focus = i;
- break;
- }
- }
- }
- }
- }
- function calc_lines(ctab) {
- var i, j;
- var padx = 0;
- var tmp_img;
- var gp;
- var lineh;
- g_tab_length = 0;
- if(ww==0) return ctab; // test to avoid errors if panel is hidden (ww=0)
- tmp_img = gdi.CreateImage(ww-(H_PADDING*2)-padx, 100);
- gp = tmp_img.GetGraphics();
- for(i=0;i<ctab.length;i++) {
- // calc sentence #lines to display / window.width
- lineh = gp.MeasureString(ctab[i].text, g_font, 0, 0, ww-(H_PADDING*2)-padx, wh).Height;
- ctab[i].total_lines = (lineh/LINE_HEIGHT) > Math.floor(lineh/LINE_HEIGHT) ? Math.floor(lineh/LINE_HEIGHT) + 1 : Math.floor(lineh/LINE_HEIGHT) ;
- ctab[i].ante_lines = 0;
- for(j=0;j<i;j++) {
- ctab[i].ante_lines += ctab[j].total_lines;
- }
- g_tab_length += ctab[i].total_lines;
- }
- CollectGarbage();
- return ctab;
- }
- function sort_tab(tab2sort) {
- var tab = Array();
- var i, j;
- var tmp = new sentence;
- var smallest = 0;
- for(i=0;i<tab2sort.length;i++) {
- for(j=i;j<tab2sort.length;j++) {
- if(tab2sort[i].timer > tab2sort[j].timer) {
- tmp = tab2sort[i];
- tab2sort[i] = tab2sort[j];
- tab2sort[j] = tmp;
- }
- }
- tab.push(tab2sort[i]);
- }
- return tab;
- }
- function remove_enhanced_balises(str) {
- var i;
- var chr1, chr2;
- var new_str="";
- for(i=0;i<str.length;i++) {
- chr1 = str.substring(i, i+1);
- if(i+10<=str.length) chr2 = str.substring(i+9, i+10); else chr2=null;
- if(chr1=="<" && chr2==">") {
- i = i + 10 - 1;
- } else {
- new_str = new_str + chr1;
- }
- }
- return new_str;
- }
- function ts_analyzer(str) {
- var i, j, ch, ts_len;
- var str2 = "";
- var state=0;
- var deb = -1;
- var fin = -1;
- var sep1 = -1;
- var sep2 = -1;
- var suite=0;
- for(i=0;i<str.length;i++) {
- ch = str.substring(i, i+1);
- switch(state) {
- case 0:
- if(ch=="[" && IsNumeric(str.substring(i+1, i+2))) {
- state=1;
- deb=i;
- fin=-1;
- }
- break;
- case 1:
- if(deb>=0 && ch==":") {
- state=2;
- sep1=i;
- }
- if(i>deb+3) {
- deb=-1;
- fin=-1;
- sep1=-1;
- sep2=-1;
- state=0;
- }
- break;
- case 2:
- if(sep1>=0 && (ch==":" || ch==".")) {
- state=3;
- sep2=i;
- }
- if(sep1>=0 && sep2==-1 && ch=="]") {
- state=4;
- fin=i;
- }
- if(i>sep1+3) {
- deb=-1;
- fin=-1;
- sep1=-1;
- sep2=-1;
- state=0;
- }
- break;
- case 3:
- if(deb>=0 && ch=="]") {
- state=4;
- if(i==str.length-1) {
- str=str+" ";
- }
- fin=i;
- }
- if(i>deb+10) {
- deb=-1;
- fin=-1;
- sep1=-1;
- sep2=-1;
- state=0;
- }
- break;
- case 4:
- ts_len=fin-deb+1;
- switch(ts_len) {
- case 6:
- str2 = str2 + "[0" + str.substring(deb+1,deb+2) + ":" + str.substring(deb+3, deb+5) + ".00]";
- break;
- case 7:
- str2 = str2 + str.substring(deb,deb+6) + ".00]";
- break;
- case 9:
- str2 = str2 + "[0" + str.substring(deb+1,deb+2) + ":" + str.substring(deb+3, deb+5) + "." + str.substring(deb+6, deb+8) + "]";
- break;
- case 10:
- if(sep1==deb+2) {
- str2 = str2 + "[0" + str.substring(deb+1,deb+2) + ":" + str.substring(deb+3, deb+5) + "." + str.substring(deb+6, deb+8) + "]";
- } else {
- str2 = str2 + str.substring(deb,deb+10);
- }
- break;
- case 11:
- str2 = str2 + str.substring(deb,deb+9) + "]";
- break;
- }
- j += 10;
- if(str.substring(fin+1,fin+2)=="[") {
- suite = 1;
- i = fin;
- deb = -1;
- fin = -1;
- sep1 = -1;
- sep2 = -1;
- state = 0;
- } else {
- suite = -1;
- i = str.length - 1;
- str2 = str2 + str.substring(fin+1, str.length);
- }
- break;
- }
- }
- return str2;
- }
- function IsNumeric(str) {
- var ValidChars = "0123456789.";
- for (i = 0; i < str.length; i++) {
- if (ValidChars.indexOf(str.charAt(i)) == -1) {
- return false;
- }
- }
- return true;
- }
- function IsTimestamped(str) {
- var ValidChars = "[0123456789:.]";
- var count = 0;
- for (i = 0; i < (str.length>10?10:str.length); i++) {
- if (ValidChars.indexOf(str.charAt(i)) >=0) {
- count++;
- }
- }
- if(count>=6 && count <=11) {
- return true;
- } else {
- return false;
- }
- }
- function check_file(path, filename) {
- if(file_exists(path+filename+".lrc")) {
- g_lyrics_filename = filename+".lrc";
- g_lyrics_path = path;
- return true;
- } else {
- if(file_exists(path+filename+".txt")) {
- g_lyrics_filename = filename+".txt";
- g_lyrics_path = path;
- return true;
- }
- }
- return false;
- }
- function get_lyrics() {
- var i, count, delta, tag;
- var tpath = Array(g_metadb?lyrics_dir1.EvalWithMetadb(g_metadb):lyrics_dir2, lyrics_dir2);
- var tfilename = Array(artist2.Eval() + " -" + title2.Eval(), artist2.Eval() + " - " + title2.Eval());
- var bool_tag = false;
- var bool_file = false;
- g_codepage=0;
- // reset lyrics tab
- g_lyrics_status = 0;
- if(g_tab.length>0) g_tab.splice(0, g_tab.length);
- pos = midpoint;
- focus = 0;
- window.Repaint();
- // check TAGs
- tag = lyrics.Eval();
- if(tag.length>0) {
- bool_tag = true;
- if(tag.substring(0,1)=="[") g_lyrics_status = 1; else g_lyrics_status = 2;
- } else {
- // check files
- i = 0;
- while(!bool_file && i<2) {
- j = 0;
- while(!bool_file && j<2) {
- bool_file = check_file(tpath[i], tfilename[j]);
- j++;
- }
- i++;
- }
- }
- // if lyrics found
- if(bool_tag || bool_file) {
- if(bool_tag) {
- g_tab = parse_tag(tag, "[");
- } else {
- g_codepage = utils.FileTest(g_lyrics_path+g_lyrics_filename, "chardet");
- if(g_codepage==0) g_codepage = get_encoding(g_lyrics_path, g_lyrics_filename);
- g_tab = parse_tag(load_txt_file(g_lyrics_path, g_lyrics_filename, g_codepage), "[");
- }
- } else {
- g_tab = load_track_info();
- delta = (g_tab[g_tab.length-1].ante_lines + g_tab[g_tab.length-1].total_lines);
- pos = Math.round(((wh-REFLECT_HEIGHT) / 2) - (delta * LINE_HEIGHT / 2));
- }
- if(g_lyrics_status==2) {
- for(i=0;i<g_tab.length-1;i++) {
- g_tab[i].timer = i * Math.floor(len_seconds.Eval() * 100 / g_tab.length);
- }
- }
- // dump
- for(i=0;i<g_tab.length;i++) {
- //fb.trace("i="+i+" // timer="+g_tab[i].timer+" // txt="+g_tab[i].text+" // ante="+g_tab[i].ante_lines+" // nbl="+g_tab[i].total_lines);
- }
- }
- function refresh_images() {
- var i, j;
- var iw, ir;
- // Icons colours
- var cc01 = RGB(10,10,10);
- var cc02 = RGB(150,150,150);
- var cc03 = RGB(250,250,250);
- var cc04 = RGB(200,200,200);
- // Artist Icon
- icon_artist_img = gdi.CreateImage(26, 20);
- gb = icon_artist_img.GetGraphics();
- gb.SetSmoothingMode(2);
- gb.FillEllipse(05, 0, 7, 6, cc03 & 0xa0ffffff);
- gb.DrawEllipse(05, 0, 7, 6, 1.0, RGBA(0,0,0,080));
- gb.FillEllipse(01, 6, 15, 8, cc03 & 0xa0ffffff);
- gb.DrawEllipse(01, 6, 15, 8, 1.0, RGBA(0,0,0,080));
- gb.DrawLine(04,11,04,13,1.0, RGBA(0,0,0,100));
- gb.DrawLine(13,11,13,13,1.0, RGBA(0,0,0,100));
- gb.SetSmoothingMode(0);
- icon_artist_img.ReleaseGraphics(gb);
- // Album Icon
- icon_album_img = gdi.CreateImage(30, 20);
- gb = icon_album_img.GetGraphics();
- gb.SetSmoothingMode(2);
- gb.FillEllipse(11, 0, 15, 15, cc03 & 0x60ffffff);
- gb.DrawEllipse(11, 0, 15, 15, 1.0, RGBA(0,0,0,080));
- gb.DrawEllipse(12, 1, 13, 13, 1.0, cc03 & 0x70ffffff);
- gb.FillEllipse(15, 4, 7, 7, cc03 & 0xbbffffff);
- gb.FillEllipse(17, 6, 3, 3, cc01 & 0x80ffffff);
- gb.SetSmoothingMode(0);
- icon_album_img.ReleaseGraphics(gb);
- // crop Icon
- icon_crop_img = gdi.CreateImage(20, 20);
- gb = icon_crop_img.GetGraphics();
- gb.SetSmoothingMode(0);
- gb.DrawRect(2,0,12,12,1.0,cc02);
- gb.DrawRect(0,2,16,8,1.0,cc04);
- icon_crop_img.ReleaseGraphics(gb);
- // center Icon
- icon_center_img = gdi.CreateImage(20, 20);
- gb = icon_center_img.GetGraphics();
- gb.SetSmoothingMode(0);
- gb.DrawRect(2,0,12,12,1.0,cc02);
- gb.DrawRect(2,2,12,8,1.0,cc04);
- icon_center_img.ReleaseGraphics(gb);
- // fill Icon
- icon_fill_img = gdi.CreateImage(20, 20);
- gb = icon_fill_img.GetGraphics();
- gb.SetSmoothingMode(0);
- gb.DrawRect(2,0,12,12,1.0,cc02);
- gb.FillSolidRect(8,1,1,4,cc04);
- gb.FillSolidRect(7,2,3,1,cc04);
- gb.FillSolidRect(8,8,1,4,cc04);
- gb.FillSolidRect(7,10,3,1,cc04);
- gb.FillSolidRect(3,6,4,1,cc04);
- gb.FillSolidRect(4,5,1,3,cc04);
- gb.FillSolidRect(10,6,4,1,cc04);
- gb.FillSolidRect(12,5,1,3,cc04);
- icon_fill_img.ReleaseGraphics(gb);
- // initialize icon buttons
- for (i = 0; i < mybutton.length; i++) {
- switch (i) {
- case 0: // album icon
- mybutton[i].create(icon_album_img, icon_album_img, icon_album_img, "", -01);
- break;
- case 1: // artist icon
- mybutton[i].create(icon_artist_img, icon_artist_img, icon_artist_img, "", -02);
- break;
- case 2: // crop icon
- mybutton[i].create(icon_crop_img, icon_crop_img, icon_crop_img, "", -03);
- break;
- case 3: // center icon
- mybutton[i].create(icon_center_img, icon_center_img, icon_center_img, "", -04);
- break;
- case 4: // fill icon
- mybutton[i].create(icon_fill_img, icon_fill_img, icon_fill_img, "", -05);
- break;
- }
- }
- CollectGarbage();
- }
- function settings_menu(x, y) {
- var MF_SEPARATOR = 0x00000800;
- var MF_STRING = 0x00000000;
- var MF_GRAYED = 0x00000001;
- var MF_DISABLED = 0x00000002;
- var _menu = window.CreatePopupMenu();
- var idx;
- //_menu.AppendMenuItem(MF_STRING, 1, "Enable Lyrics Display");
- _menu.AppendMenuItem(opt_show_lyrics ? (fb.IsPlaying ? MF_STRING : MF_GRAYED) : MF_GRAYED, 2, "Refresh Lyrics");
- _menu.AppendMenuItem(MF_SEPARATOR, 0, "");
- _menu.AppendMenuItem(MF_STRING, 3, "Panel Properties...");
- //_menu.AppendMenuItem(MF_STRING, 4, "Configure...");
- _menu.CheckMenuItem(1, opt_show_lyrics?1:0);
- idx = _menu.TrackPopupMenu(x, y);
- switch (idx) {
- case 1:
- if(opt_show_lyrics) {
- opt_show_lyrics = update_option("show_lyrics",0)==1?true:false;
- } else {
- opt_show_lyrics = update_option("show_lyrics",1)==1?true:false;
- }
- window.Repaint();
- break;
- case 2:
- reset_lyrics();
- window.Repaint();
- break;
- case 3:
- window.ShowProperties();
- break;
- case 4:
- window.ShowConfigure();
- break;
- }
- _menu.Dispose();
- return true;
- }
- //=================================================// Playlist Callbacks
- function on_playlists_changed() {
- on_item_focus_change();
- }
- function on_playlist_switch() {
- on_item_focus_change();
- }
- //=================================================// MetaDB Callbacks
- function on_item_focus_change() {
- if(g_metadb) {
- window.UnwatchMetadb();
- }
- g_metadb = (fb.IsPlaying||fb.IsPaused)?fb.GetNowPlaying():fb.PlaylistItemCount(fb.ActivePlaylist)>0?fb.GetFocusItem():false;
- if(g_metadb) {
- on_metadb_changed();
- window.WatchMetadb(g_metadb);
- }
- }
- function on_metadb_changed() {
- g_path = tf_path.EvalWithMetadb(g_metadb);
- g_track_type = TrackType(g_path);
- reset_lyrics();
- }
- function on_notify_data(name, info) {
- switch(name) {
- case "colour":
- break;
- }
- }
- function on_drag_enter(action) {
- action.Parsable = false;
- }
- function on_mouse_rbtn_up(x, y) {
- settings_menu(x, y);
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement