window.DefineScript('Get Covers (Artwork) radio logos', {author:'kgena_ua', version: '28102021'}); function RGBA(r, g, b, a){ return ((a << 24) | (r << 16) | (g << 8) | (b)); } function RGB(r, g, b){ return (0xff000000 | (r << 16) | (g << 8) | (b)); } function getRed(color){ return ((color >> 16) & 0xff);     } function getGreen(color){ return ((color >> 8) & 0xff); } function getBlue(color){ return (color & 0xff); } window.SetProperty("_ system " + "_".repeat(50), ""); if (window.GetProperty("_ system " + "_".repeat(50)) != "" ) window.SetProperty("_ system " + "_".repeat(50), ""); var ww = 600, wh = 600; DT_LEFT = 0x00000000; DT_RIGHT = 0x00000002; DT_CENTER = 0x00000001; DT_VCENTER = 0x00000004; DT_SINGLELINE = 0x00000020; DT_WORD_ELLIPSIS = 0x00040000; DT_NOPREFIX = 0x00000800; DT_BOTTOM = 0x00000008; MF_ENABLED = 0x00000000; MF_GRAYED = 0x00000001; MF_SEPARATOR = 0x00000800; IDC_HAND = 32649; IDC_ARROW = 32512; IDC_SIZEWE = 32644; IDC_SIZENS = 32645; VK_SHIFT = 0x10; VK_CONTROL = 0x11; VK_UP = 0x26; VK_DOWN = 0x28; VK_LEFT = 0x25; VK_RIGHT = 0x27; VK_DELETE = 0x2E; var ShiftDown = ControltDown = false; var t_bmp = gdi.CreateImage(1, 1); var t_gr = t_bmp.GetGraphics(); function textWidth(value, font) { return t_gr.CalcTextWidth(value, font); } function textHeight(value, font) { return t_gr.CalcTextHeight(value, font); } function lineWrap(t, font, width) { return t_gr.EstimateLineWrap(t, font, width) } var text_alignment = [ ["Left", DT_SINGLELINE | DT_LEFT | DT_NOPREFIX], ["Center", DT_SINGLELINE | DT_CENTER | DT_NOPREFIX], ["Right" , DT_SINGLELINE | DT_RIGHT | DT_NOPREFIX] ]; var font_style = [ ["Normal", 0], ["Bold", 1], ["Italic" , 2], ["Bold italic" , 3] ]; var text_alignment_idx = window.GetProperty("text alignment idx", 1); var font_name = window.GetProperty("font name", "Arial"); var font_style_1 = window.GetProperty("font style: text 1", 1); var font_style_2 = window.GetProperty("font style: text 2", 0); var font_style_3 = window.GetProperty("font style: text 3", 0); var font_size = window.GetProperty("font size", 11); var font_size_min = window.GetProperty("font size: min", 10); var font_size_max = window.GetProperty("font size: max", 25); var font_1, font_2, font_3, font_4; font_ini(); function font_ini() { font_1 = gdi.Font(font_name, font_size, font_style_1); font_2 = gdi.Font(font_name, font_size, font_style_2); font_3 = gdi.Font(font_name, font_size, font_style_3); font_4 = gdi.Font(font_name, 10, 0); } ColorTypeCUI = { text: 0, selection_text: 1, inactive_selection_text: 2, background: 3, selection_background: 4, inactive_selection_background: 5, active_item_frame: 6 } ColorTypeDUI = { text: 0, background: 1, highlight: 2, selection: 3 } var cc_panel_on = window.GetProperty("custom color panel on", false); var on_cc_panel = false; var cc_font = gdi.Font("Arial", 10, 1); var cc_bar_h = textHeight("0", cc_font) * 0.8; var cc_panel_x = cc_panel_y = cc_panel_w = 0; var cc_panel_h = 150; var cc_RGBV_x = cc_RGBV_y = cc_RGBV_w = 0; var cc_RGBV_interval = 1; var cc_RGBV_down, cc_RGBV_over; var R, G, B, H, S, V, cc_RGB_step, cc_V_step; var cc_RGBV_y_arr = []; var cc_RGBV_arr = [R, G, B, V]; var cc_RGB; var cc_RGBV_color = [[RGB(255, 50, 0), RGB(200, 50, 50)], [RGB(0, 255, 0), RGB(0, 180, 0)], [RGB(50, 200, 255), RGB(0, 100, 200)], [RGB(160, 160, 160), RGB(120, 120, 120)]]; var cc_text_color = [[RGB(255, 255, 220), RGB(180, 180, 180)]]; var color_name_x = color_name_w = 0; var color_arr_interval = 1; var color_arr_y = 0; var color_arr_y_arr = []; var color_arr = []; var color_arr_down = []; var color_arr_over; var cc_on_exit_bt = false; var cc_color_bg, cc_color_2, cc_color_1, cc_color_frame, cc_color_frame_prw; var cc_color_bgr_on, cc_color_2r_on, cc_color_1r_on, cc_color_framer_on, cc_color_frame_prwr_on; function get_color(){ if (window.InstanceType == 0){ color_bg = window.GetColourCUI(ColorTypeCUI.background); color_1 = window.GetColourCUI(ColorTypeCUI.inactive_selection_text); color_2 = window.GetColourCUI(ColorTypeCUI.text); color_frame = window.GetColourCUI(ColorTypeCUI.inactive_selection_text); color_frame_prw = window.GetColourCUI(ColorTypeCUI.inactive_selection_text); } else if (window.InstanceType == 1) { color_bg = window.GetColourDUI(ColorTypeDUI.background); color_1 = window.GetColourDUI(ColorTypeDUI.highlight); color_2 = window.GetColourDUI(ColorTypeDUI.text); color_frame = window.GetColourDUI(ColorTypeDUI.highlight); color_frame_prw = window.GetColourDUI(ColorTypeDUI.highlight); } window.Repaint(); } function get_custom_color_state() { cc_color_bg_on = window.GetProperty("custom color on: color_bg", false); cc_color_1_on = window.GetProperty("custom color on: color_1", false); cc_color_2_on = window.GetProperty("custom color on: color_2", false); cc_color_frame_on = window.GetProperty("custom color on: color_frame", false); cc_color_frame_prw_on = window.GetProperty("custom color on: color_frame_prw", false); } function get_custom_color() { cc_color_bg = window.GetProperty("custom color: color_bg", 0); cc_color_1 = window.GetProperty("custom color: color_1", 0); cc_color_2 = window.GetProperty("custom color: color_2", 0); cc_color_frame = window.GetProperty("custom color: color_frame", 0); cc_color_frame_prw = window.GetProperty("custom color: color_frame_prw", 0); } function ini_color() { get_custom_color(); get_custom_color_state(); color_bg = cc_color_bg_on ? cc_color_bg : color_bg; color_1 = cc_color_1_on ? cc_color_1 : color_1; color_2 = cc_color_2_on ? cc_color_2 : color_2; color_frame = cc_color_frame_on ? cc_color_frame : color_frame; color_frame_prw = cc_color_frame_prw_on ? cc_color_frame_prw : color_frame_prw; } function color_arr_ini() { color_arr = [[color_1, "color_1", "TEXT 1"], [color_2, "color_2", "TEXT 2"], [color_frame, "color_frame", "FRAME"], [color_frame_prw, "color_frame_prw", "FRAME PRW"], [color_bg, "color_bg", "BACKGROUND"]]; } get_color(); ini_color(); color_arr_ini(); cc_panel_dim(); try { var objShellApp = new ActiveXObject("Shell.Application"); var fso = new ActiveXObject("Scripting.FileSystemObject"); var WshShell = new ActiveXObject("WScript.Shell"); var htmlfile = new ActiveXObject('htmlfile'); var doc = new ActiveXObject("htmlfile"); } catch(e) { fb.ShowPopupMessage(" Failed to load required system components.\n\n Please check \"Safe mode\" has been turned off.\n File>Preferences>Tools>WSH Panel Mod"); } var clipboardData = ""; var root_folders = ["cover", "scan", "art", "img", "images", "pic"]; var path, path_r, album, artist, title, artist_stream, title_stream, genre_stream, album_artist_stream, album_stream; var old_path, old_album, old_title;; var g_img = null var on_img = false; var img_size; var img_size_recount = false; var img_alignment = ["Cente", "Centre - top", "Crop (focus on centre)", "Crop (focus on centre - top)", "Stretch"]; var img_alignment_idx = window.GetProperty("img alignment idx", 0); var img_frame = window.GetProperty("img frame", true); var img_frame_width = window.GetProperty("img frame width", 4); var no_img_msg = ""; var default_img_on = window.GetProperty("default img on", false); var default_img_path = window.GetProperty("default img path", ".\\maybe\\textures\\nocover\\no_cover_loaded.png"); var default_img; default_img_ini(); function default_img_ini() { default_img = fso.FileExists(default_img_path) ? resize_image(gdi.Image(default_img_path)) : null; } var logo = ""; var old_logo = "0"; var external = embedded = covers = []; var covernumber = 0; var new_img_name = ""; var attached_p_name = ["front cover", "back cover", "disc", "icon", "artist"]; var embedded_p_name = []; var set_external = window.GetProperty("external", true); var set_embedded = window.GetProperty("embedded", true); var set_priority = window.GetProperty("set_priority", 0); var alphabetical = window.GetProperty("alphabetical order", false); var selection_mode = window.GetProperty("selection_mode", 0); var fader = 255; var fade_effect = window.GetProperty("fade effect", false); var info_on = window.GetProperty("info", true); var info_t1 = info_t2 = info_t3 = ""; var info_t1_arr = info_t2_arr = info_t3_arr = []; var t_x = t_w = t1_y = t2_y = t3_y = t_h = t_h_old = 0; var on_text = false; var text_alignment_2 = window.GetProperty("text alignment 2", "bottom"); var text_background = window.GetProperty("text background", false); var text_bg_transparence = window.GetProperty("text bg transparence (0-255)", 150); var text_shadow = window.GetProperty("text shadow", false); var show_text_1 = window.GetProperty("show info text 1", true); var show_text_2 = window.GetProperty("show info text 2", true); var show_text_3 = window.GetProperty("show info text 3", true); var complete_path = window.GetProperty("complete_path", false); var file_operation = false; var f_timer; var delay = false; var cycle = window.GetProperty("auto cycle (sec)", 0); if (cycle > 0) set_cycle_timer(); var set_cycle = false; var c_timer, step = 0; var stream_covers_path = window.GetProperty("stream covers path", ""); var logo_files = []; var logo_files_idx = 0; var search_in_folders = []; var search_in_folders = window.GetProperty("search in folders", "") ? window.GetProperty("search in folders", "").split(";") : []; var move_img; var lb_downn = false; var dx = dy = delta_x = delta_y = pos_x = 0; var on_prw = false; var prw_on = window.GetProperty("prw", true); var prw_alignment = window.GetProperty("prw alignment", "top"); var prw_img_alignment = ["Cente", "Crop (focus on centre - top)"]; var prw_img_alignment_idx = window.GetProperty("prw img alignment idx", 1); var prw_images = window.GetProperty("prw number of images", 4); var prw_frame_on = window.GetProperty("prw frame on", true); var prw_fw = window.GetProperty("prw frame width", 4); var prw_fader = false; var prw_pos = prw_pos_old = 0; var prw_arr = prw_x_arr = []; var prw_x = prw_y = prw_ww = prw_h = 0; var prw_step = 0; prw_dim(); var scroll = scroll_ = scroll__ = scroll___ = 0; var scroll_timer_on = false; var tree_arr = []; var panel_on = true; var metadb; on_item_focus_change(); function on_paint(gr) { !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, color_bg); draw_image(gr); if (!set_cycle && info_on) draw_text(gr); if (g_img && !set_cycle && prw_on)draw_prw(gr); if (set_cycle && t_type == "file") draw_set_cycle(gr); cc_panel_on && draw_custom_color_panel(gr); } function on_playlist_switch() { on_item_focus_change(); } function on_playback_new_track(metadb) { on_item_focus_change(); } function on_playback_dynamic_info_track() { on_item_focus_change(); } function on_playback_stop() { on_item_focus_change(); } function on_selection_changed() { on_item_focus_change(); } function on_item_focus_change() { switch (selection_mode) { case 0: metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem(); break; case 1: metadb = fb.GetFocusItem(); break; } if (metadb) updateData(); } function on_metadb_changed(handles, fromhook) { if (!panel_on) return; if (!metadb) return; if (handles.Count > 0) { handles.Sort(); if (handles.BSearch(metadb) > -1) { updateData(); } } } function refresh_data() { old_path = old_album = old_title = old_logo = ""; updateData(); } function updateData() { if (!metadb || !panel_on) return; path_r = "\\" + fb.GetLibraryRelativePath(metadb).replace(/\\.*/g , ""); path = Eval1("$directory_path(%path%)"); artist = Eval1("%artist%"); album_artist = Eval1("%album artist%"); album = Eval1("%album%"); title = Eval1("%title%"); artist_stream = Eval2("%artist%"); album_artist_stream = Eval2("%album artist%"); album_stream = Eval2("%album%"); title_stream = Eval2("%title%"); genre_stream = Eval1("%genre%"); t_type = track_type(metadb.RawPath); switch (t_type) { case "file": if (title != old_title) { embedded_covers(); } if (path != old_path || album != old_album){ external_covers(); } if (path != old_path || album != old_album || title != old_title) { clear_var(); get_covers(); old_path = path; old_album = album; old_title = title; } old_logo = "0"; break; case "stream": info_text_ini(); stream_covers(false); old_path = old_album = old_title = ""; break; } } function Eval1(field) { var tfo = fb.TitleFormat("[" + field + "]"); return tfo.EvalWithMetadb(metadb); } function Eval2(field) { var tfo = fb.TitleFormat("[" + field + "]"); return tfo.Eval(); } function external_covers() { get_external_covers(path); } function embedded_covers() { get_embedded_covers(); } function clear_var() { g_img = null; dx = dy = 0; covernumber = 0; prw_pos = 0; scroll = scroll_ = scroll__ = scroll___ = 0; } function get_covers() { covers = []; switch (t_type) { case "file": external = set_external ? external : []; embedded = set_embedded ? embedded : []; if (set_priority == 0) covers = covers.concat(external, embedded); if (set_priority == 1) covers = covers.concat(embedded, external); if (new_img_name) { for (var i = 0; i < covers.length; i++) { if (typeof covers[i] != 'object'){ if (get_fnext(covers[i]) == new_img_name) { covernumber = i; new_img_name = ""; break; } } } } break; case "stream": covers.push(logo); break; } if (prw_on) { prw_fader = true; prw_ini(); } next_image(); } function get_embedded_covers() { embedded = []; embedded_p_name = []; //0 - front cover; 1 - back cover; 2 - disc; 3 - icon; 4 - artist; if ( metadb ) { for (var i = 0; i < 5; i++) { var temp = utils.GetAlbumArtEmbedded(metadb.RawPath, i); if (temp) embedded.push(temp); if (temp) embedded_p_name.push(attached_p_name[i]); } } } function sort_array_by_filename(a, b){ var name_1 = get_fnext(a).toLowerCase(), name_2 = get_fnext(b).toLowerCase(); if (name_1 < name_2) return -1; if (name_1 > name_2) return 1; } function get_external_covers(path) { var covers_dir = []; var covers_root = []; var covers_dir_subs = []; var covers_root_subs = []; var covers_external = []; external = []; tree_arr = []; try { dir = fso.GetFolder(path); root_l1 = dir.ParentFolder; root_l2 = root_l1.ParentFolder; get_covers_from_dir(covers_root, root_l2, 0); var e = new Enumerator( root_l2.SubFolders ); for(; !e.atEnd(); e.moveNext() ) { var n = e.item().Path; var sub_root_name = n.substr(n.lastIndexOf("\\") + 1, n.length); for (i in root_folders) { if (sub_root_name.toLowerCase().indexOf(root_folders[i].toLowerCase()) == 0) { get_covers_from_dir(covers_root_subs, e.item(), 1); // 1 } } } get_covers_from_dir(covers_root, root_l1, 1); var e = new Enumerator( root_l1.SubFolders ); for(; !e.atEnd(); e.moveNext() ) { var n = e.item().Path; var sub_root_name = n.substr(n.lastIndexOf("\\") + 1, n.length); for (i in root_folders) { if (sub_root_name.toLowerCase().indexOf(root_folders[i].toLowerCase()) == 0) { get_covers_from_dir(covers_root_subs, e.item(), 2); // 3 } } } get_covers_from_dir(covers_dir, dir, 2); var e = new Enumerator( dir.SubFolders ); for(; !e.atEnd(); e.moveNext() ) { get_covers_from_dir(covers_dir_subs, e.item(), 3); } tree_arr = tree_arr.map(item => item.replace(tree_arr[0].match(/^\s+/gi), "")) } catch(e) {}; covers_external = covers_external.concat(covers_dir, covers_dir_subs, covers_root, covers_root_subs); if (covers_external.length > 0) { if (alphabetical) { external = covers_external.sort(sort_array_by_filename); } if (!alphabetical) { for (i in covers_external) { var name = covers_external[i]; if ( name && get_fn(name).toLowerCase() == album.toLowerCase() ) { external.push(name); covers_external[i] = null; } } for (i in covers_external) { var name = covers_external[i]; if ( name && get_fn(name).toLowerCase() == artist.toLowerCase() ) { external.push(name); covers_external[i] = null; } } for (i in covers_external) { var name = covers_external[i]; try { if ( name && (get_fn(name).toLowerCase().match(artist.toLowerCase()) && get_fn(name).toLowerCase().match(album.toLowerCase())) ) { external.push(name); covers_external[i] = null; } } catch(e) {}; } for (i in covers_external) { var name = covers_external[i]; if ( name && get_fnext(name).match(/.*(cover|front|folder|album).*/i) ) { external.push(name); covers_external[i] = null; } } for (i in covers_external) { var name = covers_external[i]; if ( name && get_fnext(name).match(/.*back.*/i) ) { external.push(name); covers_external[i] = null; } } for (i in covers_external) { var name = covers_external[i]; if ( name && get_fnext(name).match(/.*cd.*/i) ) { external.push(name); covers_external[i] = null; } } for (i in covers_external) { if (typeof(covers_external[i]) == 'string' ) external.push(covers_external[i]); } } } } function get_covers_from_dir(array, dir, tab) { if (t_type == "file" && dir.Path.indexOf(path_r) < 0) return; if (t_type == "file" && search_in_folders.length && !search_in_folders.includes(title_case(dir.Name))) return; try { tree_arr.push(" ".repeat(tab * 5) + dir.Name.toUpperCase() + " \\"); var e = new Enumerator(dir.Files); for(; !e.atEnd(); e.moveNext() ) { var n = e.item().Name; var np = e.item().Path; if (n.match(/\.(jpg|jpeg|png|gif|bmp|tiff)$/i)) { tree_arr.push(" ".repeat((tab + 1) * 5) + n.toLowerCase()); array.push( e.item().Path ); } } } catch(e) {} } function next_image(){ var color_scheme_0 = []; if (g_img){ color_scheme_0 = JSON.parse(g_img.GetColourSchemeJSON(100)); } if (typeof covers[covernumber] == 'object') { g_img = resize_image(covers[covernumber]); } else { g_img = resize_image(gdi.Image(covers[covernumber])); } if (!g_img && default_img_on) g_img = default_img; img_size_recount = true; var color_scheme_1 = []; var compare = true; if (g_img){ color_scheme_1 = JSON.parse(g_img.GetColourSchemeJSON(100)); for( var i = 0; i < Math.min(color_scheme_0.length, color_scheme_1.length); i++ ){ if (color_scheme_0[i].col != color_scheme_1[i].col){ compare = false; break; } } } if (!compare || color_scheme_0.length == 0){ fader = fade_effect ? 0 : 255; } else { fader = 255; } fader_timer(); info_text_ini(); } function resize_image(img) { if (!img || !ww || !wh) return; if (img.Width >= 1000 && img.Height >= 1000) { var scale; var scale_w = ww / img.Width; var scale_h = wh / img.Height; if (img_alignment_idx == 0 || img_alignment_idx == 1){ scale = Math.min(scale_w, scale_h); } else { scale = Math.max(scale_w, scale_h); } var iw = Math.round(img.Width * scale); var ih = Math.round(img.Height * scale) return img.Resize(iw, ih, 1); } else { return img; } } function draw_image(gr){ if (g_img){ if (img_size_recount){ img_size = calc_img_size(g_img); img_size_recount = false; } gr.DrawImage(g_img, img_size.x, img_size.y, img_size.w, img_size.h, img_size.cx, img_size.cy, img_size.cwidth, img_size.cheight, 0, fader); if (img_size.w || img_size.h){ img_frame && gr.DrawRect( img_size.x - img_frame_width /2, img_size.y - img_frame_width /2, img_size.w + img_frame_width, img_size.h + img_frame_width, img_frame_width, RGBA(getRed(color_frame), getGreen(color_frame), getBlue(color_frame), fader)); lw = 1; img_frame && gr.DrawRect(img_size.x + lw / 2, img_size.y + lw / 2, img_size.w - lw, img_size.h - lw, lw, RGBA(getRed(color_bg), getGreen(color_bg), getBlue(color_bg), fader - 200 <= 0 ? 0 : fader - 120)); } } if (!g_img){ if (t_type == "file"){ if (set_external && !set_embedded && external.length == 0) no_img_msg = "No external covers"; if (set_embedded && !set_external && embedded.length == 0) no_img_msg = "No embedded covers"; if (set_external && set_embedded && covers.length == 0) no_img_msg = "No covers"; } else { no_img_msg = "No Radio Logo Image"; } var t_x = 10; var t_w = Math.max(ww - t_x * 2, 0); var t = no_img_msg ? gr.EstimateLineWrap( no_img_msg, font_2, t_w).filter((e, i) => !(i % 2)).map(item => trim(item)) : []; var t_h = no_img_msg ? gr.CalcTextHeight("Abc", font_2) : 0; var t_y = wh / 2 - t.length * t_h / 2; for (var i = 0; i < t.length; i++) { t[i] && text_shadow && gr.GdiDrawText( t[i], font_2, color_bg, t_x + 1, t_y + t_h * i + 1, t_w, wh, DT_CENTER | DT_NOPREFIX ); t[i] && gr.GdiDrawText( t[i], font_2, color_2, t_x, t_y + t_h * i, t_w, wh, DT_CENTER | DT_NOPREFIX ); } } } function draw_prw(gr){ if (prw_arr.length){ for (var i = 0; i < prw_arr.length; i++) { if (i >= (scroll / prw_step - 1) && i <= (scroll / prw_step + prw_images)) { img = prw_arr[i]; x = prw_fw; y = prw_fw + prw_y; if (img){ switch (prw_img_alignment_idx) { case 0: sw = (prw_h - prw_fw * 2) / img.Width; sh = (prw_h - prw_fw * 2) / img.Height; s = Math.min(sw, sh); if (sw > sh) x = x + (prw_h - prw_fw * 2 - img.Width * s) / 2; else if (sw < sh) y = y + (prw_h - prw_fw * 2 - img.Height * s) / 2; w = (img.Width) * s; h = (img.Height) * s; cx = 0; cy = 0; cwidth = img.Width ; cheight = img.Height; break; case 1: sr = img.Width / img.Height; dr = prw_h / prw_h; if (sr < dr) { r = img.Width / prw_h; cheight = prw_h * r; cy = 0; cwidth = img.Width; cx = 0; } else { r = img.Height / prw_h; cwidth = prw_h * r; cx = Math.round((img.Width - cwidth) / 2); cheight = img.Height; cy = 0; } w = prw_h - prw_fw * 2; h = prw_h - prw_fw * 2; break; } x = x + (prw_h - prw_fw) * i - scroll_; if (img.Width < 600 || img.Height < 600) { if (i == prw_pos && on_prw && covernumber != i) { lw = 1; gr.DrawRect(x - lw / 2, y - lw / 2, w + lw, h + lw, lw, color_frame_prw); } gr.DrawImage(img, x, y, w, h, cx, cy, cwidth, cheight, 0, prw_fader ? fader : 250); if (prw_frame_on && covernumber == i && x > 0 && x + w <= ww) { gr.DrawRect(x - prw_fw / 2, y - prw_fw / 2, w + prw_fw, h + prw_fw, prw_fw, RGBA(getRed(color_frame_prw), getGreen(color_frame_prw), getBlue(color_frame_prw), fader)); } lw = 1; gr.DrawRect(x + lw / 2, y + lw / 2, w - lw, h - lw, lw, RGBA(getRed(color_bg), getGreen(color_bg), getBlue(color_bg), prw_fader ? (fader - 100 < 0 ? 0 : fader) : 150)); } else { gr.GdiDrawText( img.Width + "x" + img.Height, font_4, color_1, prw_h * i , prw_y, prw_h, prw_h, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_WORD_ELLIPSIS ); } } } } } } function draw_custom_color_panel(gr) { gr.FillSolidRect(cc_panel_x, cc_panel_y, cc_panel_w, cc_panel_h, RGBA(0, 0, 0, 200)); gr.GdiDrawText("H: " + [H] + " S: " + [S] + " V: " + [cc_RGBV_arr[3]], cc_font, cc_text_color[0][1], cc_RGBV_x, cc_panel_y + 5, ww - 20, wh, DT_LEFT | DT_WORD_ELLIPSIS ); for (var i = 0; i < 4; i++) { gr.GdiDrawText(cc_RGBV_arr[i] ? cc_RGBV_arr[i] : 0, cc_font, cc_RGBV_over == i && color_arr_down.indexOf(true) >= 0 ? cc_text_color[0][0] : cc_text_color[0][1], 0, cc_RGBV_y_arr[i], cc_RGBV_x - 5, wh, DT_RIGHT); gr.DrawRect(cc_RGBV_x + 0.5, cc_RGBV_y_arr[i] + 0.5, cc_RGBV_w - 1, cc_bar_h - 1, 1, cc_RGBV_over == i && color_arr_down.indexOf(true) >= 0 ? cc_RGBV_color[i][0] : cc_RGBV_color[i][1]); if (cc_RGBV_arr[i]) { i <= 2 && gr.FillSolidRect(cc_RGBV_x, cc_RGBV_y_arr[i], cc_RGB_step * cc_RGBV_arr[i], cc_bar_h, cc_RGBV_over == i ? cc_RGBV_color[i][0] : cc_RGBV_color[i][1]); i == 3 && gr.FillSolidRect(cc_RGBV_x, cc_RGBV_y_arr[i], cc_V_step * cc_RGBV_arr[i], cc_bar_h, cc_RGBV_over == i ? cc_RGBV_color[i][0] : cc_RGBV_color[i][1]); } } for (var i = 0; i < color_arr.length; i++) { if (color_arr[i][2]) { gr.GdiDrawText(color_arr[i][2], cc_font, color_arr_down[i] ? cc_text_color[0][0] : cc_text_color[0][1], color_name_x, color_arr_y_arr[i], ww, wh, DT_LEFT | DT_WORD_ELLIPSIS ); color_name_max_w = gr.CalcTextWidth(color_arr[i][2], cc_font); color_name_w = color_name_max_w > color_name_w ? color_name_max_w : color_name_w; } } cc_default = "set default"; cc_default_w = gr.CalcTextWidth(cc_default, cc_font) + 20; color_arr_x = color_name_x + color_name_w + 10; color_arr_w = (cc_panel_w - color_name_w - 20 - cc_default_w); for (var i = 0; i < color_arr.length; i++) { if (color_arr[i][2]) { gr.FillSolidRect(color_arr_x, color_arr_y_arr[i], color_arr_w, cc_bar_h, color_arr[i][0]); delta = Math.max(getRed(color_arr[i][0]), getGreen(color_arr[i][0]), getBlue(color_arr[i][0])); gr.DrawRect(color_arr_x + 0.5, color_arr_y_arr[i] + 0.5, color_arr_w - 1, cc_bar_h - 1, 1, RGBA(250, 250, 250, Math.max(0, 200 - delta))); } } for (var i = 0; i < color_arr.length; i++) { if (color_arr[i][2]) { selected_color = color_arr[i][1]; cc_color_on = window.GetProperty("custom color on: " + selected_color); gr.GdiDrawText(cc_color_on ? cc_default : "", cc_font, color_arr_over == i ? cc_text_color[0][0] : cc_text_color[0][1], cc_RGBV_x, color_arr_y_arr[i], cc_RGBV_w, wh, DT_RIGHT | DT_WORD_ELLIPSIS ); } } gr.GdiDrawText("X", cc_font, cc_text_color[0][1], cc_RGBV_x, cc_panel_y + 5, cc_RGBV_w, wh, DT_RIGHT | DT_WORD_ELLIPSIS ); } function draw_set_cycle(gr){ gr.FillSolidRect(0, 0, ww, wh, RGBA(getRed(color_bg), getGreen(color_bg), getBlue(color_bg), text_bg_transparence)); var txt_cycle = cycle == 0 ? "off" : cycle + " sec"; gr.GdiDrawText("auto cycle: " + txt_cycle, font_2, color_1, 0, 20, ww, wh, DT_CENTER | DT_WORD_ELLIPSIS ); } function info_text_ini() { t_type == "file" ? get_info_text() : get_info_text_stream(); get_info_text_dim(); } function get_embedded_img_name(n) { if (set_priority == 0) idx = n - external.length; if (set_priority == 1) idx = n; return embedded_p_name[idx]; } function get_info_text() { n = prw_on && on_prw ? prw_pos : covernumber; if (covers[n]) { if (typeof covers[n] != 'object') { if(fso.FileExists(covers[n])) { if (!complete_path){ var cover_name = get_fnext(covers[n]); } else { var cover_name = covers[n].replace(/\\/g, " \\ "); } var cover_width = gdi.Image(covers[n]).Width; var cover_height = gdi.Image(covers[n]).Height; var cover_size = formatFileSize(fso.GetFile(covers[n]).Size); var cover_dim = cover_width + " x " + cover_height + " " + cover_size; } } if (typeof covers[n] == 'object') { var cover_name = get_embedded_img_name(n); var cover_width = covers[n].Width; var cover_height = covers[n].Height; var cover_dim = "embedded " + cover_width + " x " + cover_height; } var covers_number_1 = covers.length > 1 ? n + 1 + " " : ""; var covers_number_2 = external.length > 0 && embedded.length > 0 ? "(" + covers.length + ") " : ""; var covers_number_3 = external.length > 0 ? "" + (embedded.length == 0 && external.length > 1 ? "(" + external.length + ")" : external.length) + " external " : ""; var covers_number_4 = embedded.length > 0 ? "" + (external.length == 0 && embedded.length > 1 ? "(" + embedded.length + ")" : embedded.length) + " embedded " : ""; var covers_number = covers_number_1 + covers_number_2 + (set_priority == 0 ? covers_number_3 + covers_number_4 : covers_number_4 + covers_number_3); info_t1 = cover_name; info_t2 = cover_dim; info_t3 = covers_number; } } function get_info_text_stream() { text = (title_stream ? title_stream : "") + (artist_stream ? "\n" + artist_stream : ""); title = album_stream ? album_stream : title; info_t1 = text ? text : ". . ."; info_t2 = title; info_t3 = genre_stream; } function get_info_text_dim() { t_x = 10; t_w = Math.max(ww - t_x * 2, 0); info_t1_arr = info_t1 ? lineWrap( info_t1, font_1, t_w).filter((e, i) => !(i % 2)).map(item => trim(item)) : []; info_t2_arr = info_t2 ? lineWrap( info_t2, font_2, t_w).filter((e, i) => !(i % 2)).map(item => trim(item)) : []; info_t3_arr = info_t3 ? lineWrap( info_t3, font_3, t_w).filter((e, i) => !(i % 2)).map(item => trim(item)) : []; t_h_1 = show_text_1 ? textHeight("Abc", font_1) : 0; t_h_2 = show_text_2 ? textHeight("Abc", font_2) : 0; t_h_3 = show_text_3 ? textHeight("Abc", font_3) : 0; if (text_alignment_2 == "top"){ t1_y = 5; t1_y = prw_alignment == "top" ? prw_h + 5 : t1_y; t2_y = t1_y + t_h_1 * info_t1_arr.length; t3_y = t2_y + t_h_2 * info_t2_arr.length; } if (text_alignment_2 == "bottom"){ t3_y = window.Height - t_h_3 * info_t3_arr.length - 5; t3_y = prw_alignment == "bottom" ? t3_y - prw_h : t3_y; t2_y = t3_y - t_h_2 * info_t2_arr.length; t1_y = t2_y - (info_t1 ? t_h_1 * info_t1_arr.length : 0); } t_h = t_h_1 * info_t1_arr.length + t_h_2 * info_t2_arr.length + t_h_3 * info_t3_arr.length + 10; if (t_h != t_h_old) { img_size_recount = true; t_h_old = t_h; } if (!info_on) t1_y = t_h = 0; window.Repaint(); } function draw_text(gr){ if (g_img && text_background){ if (!set_cycle && img_size.y && img_size.h){ gr.FillSolidRect( 0, t1_y - 5, ww, t_h, RGBA(getRed(color_bg), getGreen(color_bg), getBlue(color_bg), text_bg_transparence)); } } for (var i = 0; i < info_t1_arr.length; i++) { show_text_1 && text_shadow && gr.GdiDrawText( info_t1_arr[i], font_1, color_bg, t_x + 1, t1_y + t_h_1 * i + 1, t_w, wh, text_alignment[text_alignment_idx][1] ); show_text_1 && gr.GdiDrawText( info_t1_arr[i], font_1, color_1, t_x, t1_y + t_h_1 * i, t_w, wh, text_alignment[text_alignment_idx][1] ); } for (var i = 0; i < info_t2_arr.length; i++) { show_text_2 && text_shadow && gr.GdiDrawText( info_t2_arr[i], font_2, color_bg, t_x + 1, t2_y + t_h_2 * i + 1, t_w, wh, text_alignment[text_alignment_idx][1] ); show_text_2 && gr.GdiDrawText( info_t2_arr[i], font_2, color_2, t_x, t2_y + t_h_2 * i, t_w, wh, text_alignment[text_alignment_idx][1] ); } for (var i = 0; i < info_t3_arr.length; i++) { show_text_3 && text_shadow && gr.GdiDrawText( info_t3_arr[i], font_3, color_bg, t_x + 1, t3_y + t_h_3 * i + 1 , t_w, wh, text_alignment[text_alignment_idx][1] ); show_text_3 && gr.GdiDrawText(info_t3_arr[i], font_3, color_2, t_x, t3_y + t_h_3 * i, t_w, wh, text_alignment[text_alignment_idx][1] ); } } function on_mouse_lbtn_down(x, y){ lb_downn = true; delta_x = x - dx; delta_y = y - dy; if (img_alignment_idx == 2){ window.SetCursor(IDC_HAND); } if (cc_panel_on && on_cc_panel) { if (color_arr_over) { if (x < cc_panel_x + cc_panel_w - cc_default_w) { set_custom_color(color_arr_over); for (var i in color_arr_y_arr) { color_arr_down[i] = false; color_arr_down[color_arr_over] = true; // editable color selection } window.RepaintRect(cc_panel_x, cc_panel_y, cc_panel_w, cc_panel_h); } if (x > cc_panel_x + cc_panel_w - cc_default_w) { selected_color = color_arr[color_arr_over][1]; cc_color_on = window.GetProperty("custom color on: " + selected_color); if (cc_color_on) { window.SetProperty("custom color on: " + selected_color, false); get_color(); ini_color(); color_arr_ini(); window.Repaint(); set_custom_color(color_arr_over); } } } if (cc_RGBV_over) { if (color_arr_down.indexOf(true) >= 0) { cc_RGBV_down = mouse_on_RGBV_bar(x, y); cc_RGBV_down && get_RGB(x); window.RepaintRect(cc_panel_x, cc_panel_y, cc_panel_w, cc_panel_h); } } if (cc_on_exit_bt) { cc_panel_on = !cc_panel_on window.SetProperty("custom color panel on", cc_panel_on); window.Repaint(); } } } function on_mouse_move(x, y) { on_prw = prw_on && y >= prw_y && y <= prw_y + prw_h ? true : false; on_text = info_on && y >= t1_y && y <= t1_y + t_h ? true : false; on_img = on_prw ? false : true; on_cc_panel = cc_panel_on && y >= cc_panel_y && y <= cc_panel_y + cc_panel_h ? true : false; if (cc_panel_on) on_prw = on_text = on_img = false; pos_x = x; if (on_img) { if (lb_downn && img_alignment_idx == 2){ dx = x - delta_x; dy = y - delta_y; img_size_recount = true; window.Repaint(); } if (img_alignment_idx == 2) { if (lb_downn){ window.SetCursor(IDC_HAND); } else { if (move_img == "h"){ window.SetCursor(IDC_SIZEWE); } else { window.SetCursor(IDC_SIZENS); } } } else { window.SetCursor(IDC_HAND); } if (prw_on && prw_pos != covernumber) { info_text_ini(); prw_pos = covernumber prw_pos_old = null; } } if (prw_on && on_prw) get_prw_pos(x); if (cc_panel_on && on_cc_panel) { cc_on_exit_bt = x > cc_panel_x + cc_panel_w - 50 && x < cc_panel_x + cc_panel_w && y > cc_panel_y && y < cc_panel_y + 20 ? true : false; cc_RGBV_over = cc_RGBV_down ? cc_RGBV_down : mouse_on_RGBV_bar(x, y); if (color_arr_down.indexOf(true) >= 0) cc_RGBV_down && get_RGB(x); color_arr_over = mouse_on_color_arr(x, y); if (cc_RGBV_over || color_arr_over) window.RepaintRect(cc_panel_x, cc_panel_y, cc_panel_w, cc_panel_h); } } function on_mouse_lbtn_up(x, y) { lb_downn = false; if (cc_panel_on) cc_RGBV_down = false; } function on_mouse_lbtn_dblclk (x,y){ if (on_img && typeof covers[covernumber] != 'object' ) { if (!fso.FileExists(covers[covernumber])) return; if (covers[covernumber]) WshShell.Run( '"' + covers[covernumber] + '"' ); } if (prw_on && on_prw) { covernumber = prw_pos; next_image(); } } function on_mouse_wheel(delta) { if (on_img && !delay && !ShiftDown && !ControltDown && covers.length > 1 && t_type == "file"){ delay = true; fdelay(); dx = 0, dy = 0; if (delta < 0) {covernumber = covernumber <= 0 ? covers.length - 1 : covernumber = covernumber - 1}; if (delta > 0) {covernumber = covernumber >= covers.length - 1 ? 0 : covernumber = covernumber + 1}; next_image(); if (prw_on) { if (delta > 0) { if (covernumber >= prw_images + (scroll / prw_step)) scroll += prw_step; if (covernumber == 0) scroll = 0; } if (delta < 0) { if (covernumber < (scroll / prw_step)) scroll -= prw_step; if (covernumber == prw_arr.length - 1) scroll = prw_step * prw_arr.length; } check_prw_selected_image(); scroll_check(); } } if (ShiftDown && !ControltDown) { if (delta < 0) {cycle = cycle <= 0 ? 0 : cycle - 5;}; if (delta > 0) {cycle = cycle >= 60 ? 60 : cycle + 5;}; window.SetProperty("auto cycle (sec)", cycle); } if (info_on && on_text && !ShiftDown && ControltDown) { font_size = Math.max(font_size_min, Math.min(font_size_max, font_size += delta * 1)); window.SetProperty("font size", font_size); font_ini(); info_text_ini(); } if (prw_on && on_prw && !ShiftDown && ControltDown) { prw_images = Math.max(3, Math.min(15, prw_images += delta * -1)); window.SetProperty("prw number of images", prw_images); prw_dim(); scroll = 0; scroll_check(); img_size_recount = true; window.Repaint(); } if (prw_on && on_prw && prw_arr.length > prw_images && !set_cycle && !ShiftDown && !ControltDown) { scroll += delta * prw_step; scroll_check(); } } function on_mouse_leave() { window.SetCursor(IDC_ARROW); } function on_key_down(vkey) { switch(vkey){ case VK_SHIFT: ShiftDown = true; if (t_type == "file"){ set_cycle = true; window.Repaint(); } break; case VK_CONTROL: ControltDown = true; break; case VK_UP: if (!set_cycle) on_mouse_wheel(1); break; case VK_DOWN: if (!set_cycle) on_mouse_wheel(-1); break; case VK_RIGHT: if (prw_on && prw_arr.length && !set_cycle && !ShiftDown && !ControltDown) { scroll += 1 * prw_step; scroll_check(); } break; case VK_LEFT: if (prw_on && prw_arr.length && !set_cycle && !ShiftDown && !ControltDown) { scroll += -1 * prw_step; scroll_check(); } break; case VK_DELETE: if (covers[covernumber] && typeof covers[covernumber] != 'object' && !set_cycle){ file_operation = true; delete_file(); } break; } } function on_key_up(vkey) { switch(vkey){ case VK_SHIFT: ShiftDown = false; set_cycle = false; if (cycle > 0) set_cycle_timer(); if (cycle == 0) window.ClearInterval(c_timer); window.Repaint(); break; case VK_CONTROL: ControltDown = false; break; } } function set_cycle_timer(){     c_timer && window.ClearInterval(c_timer);     c_timer = window.SetInterval(function() { step = set_cycle || file_operation ? 0 : step + 1; if (cycle > 0 && step >= cycle && t_type == "file"){ if (covers.length > 1) { covernumber = covernumber >= covers.length - 1 ? 0 : covernumber = covernumber + 1; next_image(); if (covernumber >= prw_images + (scroll / prw_step)) scroll += prw_step; if (covernumber == 0) scroll = 0; check_prw_selected_image(); scroll_check(); } window.Repaint(); step = 0; }     }, 1000); } function fader_timer(){     f_timer && window.ClearInterval(f_timer);     f_timer = window.SetInterval(function() { fader = fader == 0 ? 1 : fader * 2; rep_y = prw_y == 0 ? prw_h : 0; rep_h = prw_y == 0 ? wh - prw_h : wh - prw_h; if (on_prw && scroll_timer_on) { window.RepaintRect(0, rep_y, ww, rep_h); } else { window.Repaint(); } if (fader >= 255) { fader = 255; prw_fader = false; window.ClearInterval(f_timer); }     }, 40); } function fdelay(){ var delay_timer = window.SetTimeout(function() { delay = false; window.ClearTimeout(delay_timer); }, 200); } function change_filename(){ var c_file_name = get_fn(covers[prw_on && on_prw ? prw_pos : covernumber]); try { var prompt = "\nEnter new file name"; n_file_name = utils.InputBox(window.ID, prompt, "Foobar 2000", c_file_name, true); if (!/\S/.test(n_file_name)) change_filename(); if (n_file_name) { var path = get_dp(covers[on_prw ? prw_pos : covernumber]); var ext = get_fext(covers[on_prw ? prw_pos : covernumber]); try { fso.MoveFile( covers[on_prw ? prw_pos : covernumber], path + "\\" + clean(n_file_name) + "." + ext ); new_img_name = n_file_name + "." + ext; external_covers(); get_covers(); } catch(e) {} } } catch(e) {}; file_operation = false; } function delete_file(){ var file_path = covers[prw_on && on_prw ? prw_pos : covernumber]; var button_type = is_read_write(file_path) ? 0x3 : 0x5; var icon_type = is_read_write(file_path) ? 0x20 : 0x10; var second_button_is_default = 0x100; var text = is_read_write(file_path) ? "Delete file:" : "File is read - only"; var btn = WshShell.Popup(text + "\n\n" + file_path, 0, "Foobar 2000", button_type + icon_type + second_button_is_default); switch (btn) { case 6: try{ fso.DeleteFile(file_path); covernumber = covernumber == covers.length - 1 ? covernumber - 1 : covernumber; external_covers(); get_covers(); scroll_check(); } catch(e) {} break; case 2: case 7: break; case 4: delete_file(); break; } file_operation = false; } function change_file_attributes(){ var file_path = covers[prw_on && on_prw ? prw_pos : covernumber]; var txt = is_read_write(file_path) ? "file is \nREAD-WRITE" : "file is \nREAD-ONLY"; var button_type = 0x3; var icon_type = 0x40; var btn = WshShell.Popup(file_path + "\n\n" + txt + "\nchange file attributes ?", 0, "Foobar 2000", button_type + icon_type); switch (btn) { case 6: try{ var file = fso.GetFile(file_path); file.Attributes = is_read_write(file_path) ? 33 : 32; } catch(e) {} break; case 2: case 7: break; } file_operation = false; } function is_read_write(f){ if(fso.FileExists(f)) { var file = fso.GetFile(f); return file.Attributes == 32 ? true : false; } } function on_size(){ dx = 0, dy = 0; delta_x = 0, delta_y = 0; ww = window.Width; wh = window.Height; t_x = 10; t_w = Math.max(ww - t_x * 2, 0); prw_dim(); img_size_recount = true; cc_panel_dim(); } function calc_img_size(img){ if(!img) return; ww = window.Width; wh = window.Height; var size = {x:0, y:0, w:0, h:0, cx:0, cy:0, cwidth:0, cheight:0}; var frame = img_frame && img_frame_width > 0 ? img_frame_width : 0; var p_x = frame; var p_y = frame; p_y = prw_alignment == "top" ? p_y + prw_h + 2 : p_y; p_y = text_alignment_2 == "top" ? p_y + t_h : p_y; var p_w = ww - frame * 2; var p_h = wh - frame * 2 - prw_h - 2 - t_h; switch(img_alignment_idx) { case 0: // center var sw = p_w / img.Width; var sh = p_h / img.Height; var s = Math.min(sw, sh); var x = p_x; var y = p_y; if (img.Width < p_w && img.Height < p_h) { x = x + (p_w - img.Width) / 2; y = y + (p_h - img.Height) / 2; var w = img.Width; var h = img.Height; } else { if (sw > sh) x = x + (p_w - img.Width * s) / 2; else if (sw < sh) y = y + (p_h - img.Height * s) / 2; var w = img.Width * s; var h = img.Height * s; } var cx = 0; var cy = 0; var cwidth = img.Width; var cheight = img.Height; break; case 1: // top - center var sw = p_w / img.Width; var sh = p_h / img.Height; var s = Math.min(sw, sh); var x = p_x; var y = p_y; if (img.Width < p_w && img.Height < p_h) { x = x + (p_w - img.Width) / 2; var w = img.Width; var h = img.Height; } else { if (sw > sh) x = x + (p_w - img.Width * s) / 2; var w = img.Width * s; var h = img.Height * s; } var cx = 0; var cy = 0; var cwidth = img.Width; var cheight = img.Height; break; case 2: // crop (centre) movable image var sr = img.Width / img.Height; var dr = p_w / p_h; if (sr < dr) { var r = img.Width / p_w; var cheight = p_h * r; var cy = Math.round((img.Height - cheight) / 2); var wwh = Math.round(p_h + cy * 2); move_img = "v"; cy = cy - dy; cy = cy <= 0 ? 0 : cy; cy = (cy + p_h) >= wwh ? wwh - p_h : cy; var cwidth = img.Width; var cx = 0; } else { var r = img.Height / p_h; var cwidth = p_w * r; var cx = Math.round((img.Width - cwidth) / 2); var www = Math.round(p_w + cx * 2); move_img = "h"; cx = cx - dx; cx = cx <= 0 ? 0 : cx; cx = (cx + p_w) >= www ? www - p_w : cx; var cheight = img.Height; var cy = 0; } var x = p_x; var y = p_y; var w = p_w; var h = p_h; break; case 3: // crop (centre - top) var sr = img.Width / img.Height; var dr = p_w / p_h; if (sr < dr) { var r = img.Width / p_w; var cheight = p_h * r; var cy = 0; var cwidth = img.Width; var cx = 0; } else { var r = img.Height / p_h; var cwidth = p_w * r; var cx = Math.round((img.Width - cwidth) / 2); var cheight = img.Height; var cy = 0; } var x = p_x; var y = p_y; var w = p_w; var h = p_h; break; case 4: // stretch var x = p_x; var y = p_y; var w = p_w; var h = p_h; var cx = 0; var cy = 0; var cwidth = img.Width; var cheight = img.Height; break; } size.x = Math.round(x); size.y = Math.round(y); size.w = Math.round(w <= 0 ? 0 : w); size.h = Math.round(h <= 0 ? 0 : h); size.cx = Math.round(cx); size.cy = Math.round(cy); size.cwidth = Math.round(cwidth); size.cheight = Math.round(cheight); return size; } function on_mouse_rbtn_up(x, y){ function EMI(n1, v1, n2, v2){ return n1 == v1 && n2 == v2 ? MF_GRAYED : MF_ENABLED; }     var _menu = window.CreatePopupMenu(); if (!on_text && !on_prw) { if (t_type == "file"){ MF_STRING = t_type == "file" ? MF_ENABLED : MF_GRAYED;     _menu.AppendMenuItem( MF_STRING, 10, "External covers"); _menu.CheckMenuItem( 10, set_external);     _menu.AppendMenuItem( MF_STRING, 11, "Embedded covers"); _menu.CheckMenuItem( 11, set_embedded); _menu.AppendMenuItem( MF_SEPARATOR, 0, 0);     _menu.AppendMenuItem( EMI(set_priority, 0), 20, "Priority external");     _menu.AppendMenuItem( EMI(set_priority, 1), 21, "Priority embedded"); _menu.CheckMenuRadioItem( 20, 21 , set_priority + 20); _menu.AppendMenuItem( MF_SEPARATOR, 0, 0); } _menu.AppendMenuItem( EMI(selection_mode, 0), 30, "Prefer now playing"); _menu.AppendMenuItem( EMI(selection_mode, 1), 31, "Follow selected track"); _menu.CheckMenuRadioItem( 30, 31 , selection_mode + 30); if (t_type == "file"){ _menu.AppendMenuItem( MF_SEPARATOR, 0, 0); _menu.AppendMenuItem( MF_ENABLED, 40, "Alphabetical order"); _menu.CheckMenuItem( 40, alphabetical); } _menu.AppendMenuItem( MF_SEPARATOR, 0, 0); _menu.AppendMenuItem( MF_ENABLED, 50, "Image preview"); _menu.CheckMenuItem( 50, prw_on); _menu.AppendMenuItem( MF_ENABLED, 60, "Info"); _menu.CheckMenuItem( 60, info_on); var _group_image = window.CreatePopupMenu(); _group_image.AppendTo(_menu, MF_ENABLED, "Image"); MF_STRING = covers[covernumber] && typeof covers[covernumber] != 'object' ? MF_ENABLED : MF_GRAYED; _group_image.AppendMenuItem( MF_STRING, 70, "Open folder"); _group_image.AppendMenuItem( MF_ENABLED, 80, "Default image"); _group_image.CheckMenuItem( 80, default_img_on); _group_image.AppendMenuItem( MF_ENABLED, 90, "Set default image"); _group_image.AppendMenuItem( MF_ENABLED, 100, "Fade effect"); _group_image.CheckMenuItem( 100, fade_effect); _group_image.AppendMenuItem( MF_ENABLED, 110, "Frame"); _group_image.CheckMenuItem( 110, img_frame); _group_image.AppendMenuItem( MF_ENABLED, 120, "Frame width (" + img_frame_width + ")"); var _group_image_align = window.CreatePopupMenu(); _group_image_align.AppendTo( _group_image, MF_ENABLED, "Align : " + img_alignment[img_alignment_idx]); _group_image_align.AppendMenuItem( EMI(img_alignment_idx, 0), 130, img_alignment[0]); _group_image_align.AppendMenuItem( EMI(img_alignment_idx, 1), 131, img_alignment[1]); _group_image_align.AppendMenuItem( EMI(img_alignment_idx, 2), 132, img_alignment[2] + " movable image"); _group_image_align.AppendMenuItem( EMI(img_alignment_idx, 3), 133, img_alignment[3]); _group_image_align.AppendMenuItem( EMI(img_alignment_idx, 4), 134, img_alignment[4]); _group_image_align.CheckMenuRadioItem( 130, 134, img_alignment_idx + 130); _menu.AppendMenuItem( MF_SEPARATOR, 0, 0); _menu.AppendMenuItem( MF_ENABLED, 140, "Refresh"); if (t_type == "file"){ _menu.AppendMenuItem( MF_SEPARATOR, 0, 0); _menu.AppendMenuItem( MF_ENABLED, 160, "Search in folders"); _menu.AppendMenuItem( MF_ENABLED, 170, "Show loaded files"); } } if (!on_text || on_prw) { if (t_type == "file"){ var _group_file_operations = window.CreatePopupMenu(); n = prw_on && on_prw ? prw_pos : covernumber; MF_STRING = typeof covers[n] != 'object' ? MF_ENABLED : MF_GRAYED; _group_file_operations.AppendTo( _menu, MF_STRING, "File operations"); _group_file_operations.AppendMenuItem( MF_STRING, 180, "Rename file"); _group_file_operations.AppendMenuItem( MF_STRING, 190, "Delete file"); _group_file_operations.AppendMenuItem( MF_STRING, 200, "Change file attributes"); } } if (!on_text && !on_prw) { if (t_type == "stream"){ _menu.AppendMenuItem( MF_SEPARATOR, 0, 0); _menu.AppendMenuItem( MF_ENABLED, 220, "Copy logo filename"); _menu.AppendMenuItem( MF_ENABLED, 230, "Radio logo folder path"); } _menu.AppendMenuItem( MF_SEPARATOR, 0, 0); _menu.AppendMenuItem( MF_ENABLED, 240, "Custom colors"); _menu.CheckMenuItem( 240, cc_panel_on); _menu.AppendMenuItem( MF_SEPARATOR, 0, 0); _menu.AppendMenuItem( MF_ENABLED, 250, "Properties"); _menu.AppendMenuItem( MF_ENABLED, 260, "Show Configure"); _menu.AppendMenuItem( MF_ENABLED, 270, "Edit Script"); } if (on_text) {     _menu.AppendMenuItem( MF_ENABLED, 310, t_type == "file" ? "Сover name" : "Title / Artist"); _menu.CheckMenuItem( 310, show_text_1); if (t_type == "file") { MF_STRING = show_text_1 ? MF_ENABLED : MF_GRAYED; _menu.AppendMenuItem( MF_STRING, 320, "Complete path to file"); _menu.CheckMenuItem( 320, complete_path); }     _menu.AppendMenuItem( MF_ENABLED, 330, t_type == "file" ? "Сover dimmension" : "Radio"); _menu.CheckMenuItem( 330, show_text_2);     _menu.AppendMenuItem( MF_ENABLED, 340, t_type == "file" ? "Number of covers" : "Genre"); _menu.CheckMenuItem( 340, show_text_3);     _menu.AppendMenuItem( MF_ENABLED, 350, "Text on " + (text_alignment_2 == "top" ? "bottom" : "top")); var _group_text = window.CreatePopupMenu(); _group_text.AppendTo(_menu, MF_ENABLED, "Text");     _group_text.AppendMenuItem( MF_ENABLED, 360, "Text background");     _group_text.CheckMenuItem( 360, text_background);     _group_text.AppendMenuItem( MF_ENABLED, 370, "Text shadow");     _group_text.CheckMenuItem( 370, text_shadow);     _group_text.AppendMenuItem( MF_ENABLED, 380, "Font name : " + font_name); var _group_font_style = window.CreatePopupMenu(); _group_font_style.AppendTo( _group_text, MF_ENABLED, "Font style"); var _group_font_style_h0 = window.CreatePopupMenu(); MF_TEXT = t_type == "file" ? "Сover name" : "Title / Artist"; _group_font_style_h0.AppendTo( _group_font_style, MF_ENABLED, MF_TEXT + " : " + font_style[font_style_1][0]); _group_font_style_h0.AppendMenuItem( EMI(font_style_1, 0), 390, font_style[0][0]); _group_font_style_h0.AppendMenuItem( EMI(font_style_1, 1), 391, font_style[1][0]); _group_font_style_h0.AppendMenuItem( EMI(font_style_1, 2), 392, font_style[2][0]); _group_font_style_h0.AppendMenuItem( EMI(font_style_1, 3), 393, font_style[3][0]); _group_font_style_h0.CheckMenuRadioItem( 390, 393, font_style_1 + 390); var _group_font_style_h1 = window.CreatePopupMenu(); MF_TEXT = t_type == "file" ? "Сover dimmension" : "Radio"; _group_font_style_h1.AppendTo( _group_font_style, MF_ENABLED, MF_TEXT + " : " + font_style[font_style_2][0]); _group_font_style_h1.AppendMenuItem( EMI(font_style_2, 0), 400, font_style[0][0]); _group_font_style_h1.AppendMenuItem( EMI(font_style_2, 1), 401, font_style[1][0]); _group_font_style_h1.AppendMenuItem( EMI(font_style_2, 2), 402, font_style[2][0]); _group_font_style_h1.AppendMenuItem( EMI(font_style_2, 3), 403, font_style[3][0]); _group_font_style_h1.CheckMenuRadioItem( 400, 403, font_style_2 + 400); var _group_font_style_h2 = window.CreatePopupMenu(); MF_TEXT = t_type == "file" ? "Number of covers" : "Genre"; _group_font_style_h2.AppendTo( _group_font_style, MF_ENABLED, MF_TEXT + " : " + font_style[font_style_3][0]); _group_font_style_h2.AppendMenuItem( EMI(font_style_3, 0), 410, font_style[0][0]); _group_font_style_h2.AppendMenuItem( EMI(font_style_3, 1), 411, font_style[1][0]); _group_font_style_h2.AppendMenuItem( EMI(font_style_3, 2), 412, font_style[2][0]); _group_font_style_h2.AppendMenuItem( EMI(font_style_3, 3), 413, font_style[3][0]); _group_font_style_h2.CheckMenuRadioItem( 410, 413, font_style_3 + 410); var _group_font_align = window.CreatePopupMenu(); _group_font_align.AppendTo( _group_text, MF_ENABLED, "Text alignment : " + text_alignment[text_alignment_idx][0]); _group_font_align.AppendMenuItem( EMI(text_alignment_idx, 0), 420, text_alignment[0][0]); _group_font_align.AppendMenuItem( EMI(text_alignment_idx, 1), 421, text_alignment[1][0]); _group_font_align.AppendMenuItem( EMI(text_alignment_idx, 2), 422, text_alignment[2][0]); _group_font_align.CheckMenuRadioItem( 420, 422, text_alignment_idx + 420); } if (on_prw) { _menu.AppendMenuItem( MF_ENABLED, 600, "Image preview on " + (prw_alignment == "top" ? "bottom" : "top")); _menu.AppendMenuItem( MF_ENABLED, 610, "Frame"); _menu.CheckMenuItem( 610, prw_frame_on); _menu.AppendMenuItem( MF_ENABLED, 620, "Frame width (" + prw_fw + ")"); var _group_prw_image_align = window.CreatePopupMenu(); _group_prw_image_align.AppendTo( _menu, MF_ENABLED, "Image align : " + prw_img_alignment[prw_img_alignment_idx]); _group_prw_image_align.AppendMenuItem( EMI(prw_img_alignment_idx, 0), 630, prw_img_alignment[0]); _group_prw_image_align.AppendMenuItem( EMI(prw_img_alignment_idx, 1), 631, prw_img_alignment[1]); _group_prw_image_align.CheckMenuRadioItem( 630, 631, prw_img_alignment_idx + 630); } ret = _menu.TrackPopupMenu(x, y);     switch (ret) {     case 10: set_external = set_external == false ? true : set_embedded == false ? true : false; window.SetProperty("external", set_external); clear_var(); external_covers(); get_covers();         break;     case 11: set_embedded = set_embedded == false ? true : set_external == false ? true : false; window.SetProperty("embedded", set_embedded); clear_var(); embedded_covers(); get_covers();         break;     case 20:     case 21: set_priority = ret - 20; window.SetProperty("set_priority", set_priority); clear_var(); get_covers();         break; case 30: case 31: selection_mode = ret - 30; window.SetProperty("selection_mode", selection_mode); on_item_focus_change(); break; case 40: alphabetical = !alphabetical; window.SetProperty("alphabetical order", alphabetical); clear_var(); external_covers(); get_covers(); break; case 50: prw_on = !prw_on; window.SetProperty("prw", prw_on); prw_dim(); get_info_text_dim() img_size_recount = true; window.Repaint(); if (prw_on) { prw_ini(); scroll = prw_step * covernumber; scroll_check(); } break; case 60: window.SetProperty("info", !info_on); info_on = window.GetProperty("info"); get_info_text_dim(); img_size_recount = true; break; case 70: if (fso.FolderExists(get_dp(covers[covernumber]))) WshShell.Run( '"' + get_dp(covers[covernumber]) + '"' ); break; case 80: default_img_on = !default_img_on; window.SetProperty("default img on", default_img_on); next_image(); break; case 90: set_default_img_path("default image", default_img_path, ""); break; case 100: window.SetProperty("fade effect", !fade_effect); fade_effect = window.GetProperty("fade effect"); break; case 110: img_frame = !img_frame; window.SetProperty("img frame", img_frame); img_size_recount = true; window.Repaint(); break; case 120: set_num_variable("frame width", img_frame_width); break; case 130: case 131: case 132: case 133: case 134: img_alignment_idx = ret - 130; window.SetProperty("img alignment idx", img_alignment_idx); dx = 0, dy = 0; next_image(); window.Repaint(); break; case 140: if (t_type == "file") { refresh_data(); } else { stream_covers(true); } break; case 150: /// break; case 160: set_search_folders(search_in_folders); break; case 170: loaded_files(); break; case 180: file_operation = true; change_filename(); break; case 190: file_operation = true; delete_file(); break; case 200: file_operation = true; change_file_attributes(); break; case 210: /// break; case 220: htmlfile.parentWindow.clipboardData.setData("text", title.replace(/[^a-zA-Z0-9а-яА-Я\s-]/g, '').replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, '')); break;     case 230: get_folder(); break; case 240: cc_panel_on = !cc_panel_on; window.SetProperty("custom color panel on", cc_panel_on); window.Repaint(); break     case 250:         window.ShowProperties();         break;    case 260: window.ShowConfigureV2(); break; case 270: window.EditScript(); break;     case 310: show_text_1 = !show_text_1; show_text_1 = !show_text_1 && !show_text_2 && !show_text_3 ? true : show_text_1; window.SetProperty("show info text 1", show_text_1); info_text_ini();         break;     case 320: complete_path = !complete_path; window.SetProperty("complete_path", complete_path); info_text_ini(); break;     case 330: show_text_2 = !show_text_2; show_text_2 = !show_text_1 && !show_text_2 && !show_text_3 ? true : show_text_2; window.SetProperty("show info text 2", show_text_2); info_text_ini(); break;     case 340: show_text_3 = !show_text_3; show_text_3 = !show_text_1 && !show_text_2 && !show_text_3 ? true : show_text_3; window.SetProperty("show info text 3", show_text_3); info_text_ini();         break;     case 350: text_alignment_2 = text_alignment_2 == "top" ? "bottom" : "top"; window.SetProperty("text alignment 2", text_alignment_2); info_text_ini(); img_size_recount = true;         break;     case 360: text_background = !text_background; window.SetProperty("text background", text_background); window.Repaint();         break;     case 370: text_shadow = !text_shadow; window.SetProperty("text shadow", text_shadow); window.Repaint();         break;     case 380: set_font_name("font name", font_name, "");         break;     case 390:     case 391:     case 392:     case 393: font_style_1 = ret - 390; window.SetProperty("font style: text 1", font_style_1); font_ini(); window.Repaint();         break     case 400:     case 401:     case 402:     case 403: font_style_2 = ret - 400; window.SetProperty("font style: text 2", font_style_2); font_ini(); window.Repaint();         break     case 410:     case 411:     case 412:     case 413: font_style_3 = ret - 410; window.SetProperty("font style: text 3", font_style_3); font_ini(); window.Repaint();         break     case 420:     case 421:     case 422: text_alignment_idx = ret - 420; window.SetProperty("text alignment idx", text_alignment_idx); window.Repaint();         break case 600: prw_alignment = prw_alignment == "top" ? "bottom" : "top"; window.SetProperty("prw alignment", prw_alignment); prw_dim(); get_info_text_dim() img_size_recount = true; window.Repaint(); break; case 610: prw_frame_on = !prw_frame_on; window.SetProperty("prw frame on", prw_frame_on); window.Repaint(); break; case 620: set_num_variable("frame width prw", prw_fw); break; case 630: case 631: prw_img_alignment_idx = ret - 630; window.SetProperty("prw img alignment idx", prw_img_alignment_idx); window.Repaint(); break; }     return true;    }  function set_search_folders(val) { try { promt = "Load images only from the folders:\n\nuse ';' as separator of folders name." val = val.join(";"); val = val.length ? val + ";" : val; n_val = utils.InputBox(window.ID, promt, "Foobar 2000", val, true); if (!/\S/.test(n_val) || n_val == "") { search_in_folders = []; } else { search_in_folders = n_val.split(";").map(item => title_case(trim(item))).filter((e, i) => e); } window.SetProperty("search in folders", search_in_folders.join(";")); clear_var(); external_covers(); get_covers();; } catch(e) {}; } function set_font_name(prompt, val, prompt_tmp) { try { n_val = utils.InputBox(window.ID, title_case(prompt + prompt_tmp), "Foobar 2000", val, true); n_val = title_case(trim(n_val)); if (!/\S/.test(n_val) || n_val == "" || !utils.CheckFont(n_val)) { if (!utils.CheckFont(n_val)) prompt_tmp = "\n\nfont '" + (n_val ? n_val : " ... ") + "' not found"; set_font_name(prompt, val, prompt_tmp); } else { font_name = n_val; window.GetProperty("font name", font_name); font_ini(); window.Repaint(); } } catch(e) {}; } function set_default_img_path(prompt, val, prompt_tmp) { try { n_val = utils.InputBox(window.ID, title_case(prompt + prompt_tmp), "Foobar 2000", val, true); if (!/\S/.test(n_val) || n_val == "" || !fso.FileExists(n_val)) { if (!fso.FileExists(n_val)) prompt_tmp = "\n" + get_fnext(n_val) + "\nnot found"; set_default_img_path(prompt, val, prompt_tmp); } else { default_img_path = n_val; window.SetProperty("default img path", default_img_path); default_img_ini(); next_image(); } } catch(e) {}; } function set_num_variable(prompt, val) { try { n_val = utils.InputBox(window.ID, title_case(prompt), "Foobar 2000", val, true); if (!/\S/.test(n_val) || n_val == "" || n_val.match(/\d*/i) == "") { set_num_variable(prompt, val); } else { n_val = parseInt(n_val, 10); switch(prompt) { case "frame width": if (n_val < 1 || n_val > ww / 6) set_num_variable(prompt, val); img_frame_width = n_val; window.SetProperty("img frame width", img_frame_width); img_size_recount = true; window.Repaint(); break; case "frame width prw": if (n_val < 1 || n_val > prw_h / 6) set_num_variable(prompt, val); prw_fw = n_val; window.SetProperty("prw frame width", prw_fw); prw_dim(); img_size_recount = true; window.Repaint(); break; } } } catch(e) {}; } function get_folder() { var delay = window.SetTimeout(function() { try { var prompt = stream_covers_path + "\nSelect folder with radio logo images"; var folder = objShellApp.BrowseForFolder(0, prompt, 512, 17); if (folder != null) { if (folder.Self.Path.length <= 3) { stream_covers_path = ""; get_folder(); } else { stream_covers_path = folder.Self.Path; window.SetProperty("stream covers path", stream_covers_path); stream_covers(true); } } } catch(e) {}; window.ClearTimeout(delay); }, 500); } function loaded_files() { var delay = window.SetTimeout(function() { var title = "Loaded files"; var txt = tree_arr.join('\n') var btn = WshShell.Popup(txt, 0, title); window.ClearTimeout(delay); }, 500); } function get_fnext(p) { if (!p) return; return p.replace(/.*\\/g, ''); } function get_fn(p) { if (!p) return; return p.replace(/.*\\|\.[^.]+$/g, '') } function get_fext(p) { if (!p) return; return p.replace(/.*\./g, ''); } function get_dp(p) { if (!p) return; return p.replace(/(.*)\\.*/g, '$1'); } function clear_n(p) { if (!p) return; return p.replace(/[^a-zA-Z0-9а-яА-Я]/g, ''); } function formatFileSize(b){ if (b > 1024 * 1024){ b = Math.round(b / 1024 / 1024 * 100) / 100 + " MB" } else if (b > 1024){ b = Math.round(b / 1024 * 100) / 100 + " KB" } else { b = b + " Bytes"; } return b; } function trim(n){ if (!n) return; return n.replace(/^\s+|\s+$/g, "").replace(/\s{1,}/g," "); } function clean(n) { var tmp = n.replace(/\./g, "").replace(/\//g, "-").replace(/\:/g, "-").replace(/\*/g, "x").replace(/\?/g, "").replace(/\"/g, "''").replace(/\/g, "_").replace(/\|/g, "").replace(/\\/g, ""); return tmp.replace(/^\s+|\s+$/g, "").substr(0, 150); } function title_case(str) { if (!str) return ""; var arr = str.toLowerCase().split(" "); for (i = 0; i < arr.length; i++) { arr[i] = arr[i].charAt(0).toUpperCase() + (arr[i].substr(1)); } return arr.join(" "); } function stream_covers(refresh) { if (!logo_files.length || refresh) get_stream_covers_from_dir(stream_covers_path); logo = search1 = search2 = ""; search1 = title.replace(/[^a-z0-9а-я]/gi, ''); if (album_artist && album){ search2 = (album_artist + " - " + album).replace(/[^a-z0-9а-я]/gi, ''); } else if (album){ search2 = album.replace(/[^a-z0-9а-я]/gi, ''); } logo_files_idx = 0; for (var i = 0; i < logo_files.length; i++){ var file = get_fn(logo_files[i]).replace(/[^a-z0-9а-я]/gi, ''); if (search1.toLowerCase() == file.toLowerCase() || search2.toLowerCase() == file.toLowerCase()) { logo = logo_files[i]; logo_files_idx = i; } } if (logo != old_logo || refresh){ clear_var(); get_covers(); old_logo = logo; } } function get_stream_covers_from_dir(path) { if (!fso.FolderExists(path)) return; logo_files = []; tree_arr = []; dir = fso.GetFolder(path); get_covers_from_dir(logo_files, dir, 0); var e = new Enumerator(dir.SubFolders); for(; !e.atEnd(); e.moveNext() ) { get_covers_from_dir(logo_files, e.item(), 1); } } function prw_dim() { prw_x = 0; prw_ww = Math.max(ww - prw_x, 0) + (prw_images - 1) * prw_fw; prw_h = prw_on ? prw_ww / prw_images : 0; prw_step = prw_h - prw_fw; if (prw_alignment == "top") { prw_y = 0; } else { prw_y = prw_on ? wh - prw_h : 0; } prw_x_arr = []; for (var i = 0; i < prw_images; i++) { prw_x_arr.push(prw_fw + i * (prw_h - prw_fw)); } get_info_text_dim(); } function prw_ini() { prw_arr = []; for (var i = 0; i < covers.length; i++) { if (typeof covers[i] == 'object') { prw_arr.push(covers[i]); } else { prw_arr.push(gdi.Image(covers[i])); } } if (prw_arr.length) resize_image_prw_delay(); } function get_prw_pos(x) { prw_pos = Math.round(scroll / prw_step) + Math.min(prw_arr.length - 1, mouse_on_b(x)); if (prw_pos != prw_pos_old) { window.RepaintRect(prw_x, prw_y, ww, prw_h); info_text_ini(); prw_pos_old = prw_pos; } } function check_prw_selected_image() { if (covernumber < (scroll / prw_step) + 1) scroll = prw_step * covernumber; if (covernumber >= (scroll / prw_step) + prw_images) scroll = prw_step * (covernumber - prw_images + 1); } function mouse_on_b(x) { for (var i in prw_x_arr) { if (x >= prw_x_arr[i] && x <= prw_x_arr[i] + prw_h - prw_fw) return parseInt(i, 10); } } function scroll_check() { if (prw_arr.length < prw_images) return; if (scroll <= 0) { scroll = 0; } else if (Math.abs(scroll) >= prw_step * (prw_arr.length - prw_images)) { scroll = prw_step * (prw_arr.length - prw_images); } !scroll_timer_on && scroll_timer(); } function scroll_timer() { scroll_timer_on = true; s_timer = window.SetInterval(function() { if (Math.abs(scroll - scroll_) > 0.1) { scroll_k = 2; scroll___ += (scroll - scroll___) / scroll_k; scroll__ += (scroll___ - scroll__) / scroll_k; scroll_ += (scroll__ - scroll_) / scroll_k; if (on_prw) get_prw_pos(pos_x); } else { window.ClearInterval(s_timer); scroll_ = scroll; scroll_timer_on = false; } window.RepaintRect(prw_x, prw_y, ww, prw_h + 5); }, 40); } function resize_image_prw_delay() { var delay_ = window.SetTimeout(function() { for (var i = 0; i < prw_arr.length; i++) { prw_arr[i] = resize_image_prw(prw_arr[i]); } window.ClearTimeout(delay_); window.RepaintRect(prw_x, prw_y, ww, prw_h + 5); }, 1000); } function resize_image_prw(img) { if (!img) return; if (img.Width >= 600 || img.Height >= 600) { var scale_w = 500 / img.Width; var scale_h = 500 / img.Height; var scale = Math.min(scale_w, scale_h); var iw = Math.round(img.Width * scale); var ih = Math.round(img.Height * scale) return img.Resize(iw, ih, 0); } else { return img; } } function track_type(p) { var type; if (p.indexOf("file") >= 0){ type = "file"; } else if (p.indexOf("cdda") >= 0){ type = "cdda"; } else if (p.indexOf('://') >= 0 || p.indexOf('www') >= 0 || p.indexOf("youtube") >= 0 || p.indexOf("video") >= 0 || p.indexOf("vimeo") >= 0){ type = "stream"; } else { type = ""; } return type; } //**************** Custom color function set_custom_color(n) { if (!n) return R = cc_RGBV_arr[0] = getRed(color_arr[n][0]); G = cc_RGBV_arr[1] = getGreen(color_arr[n][0]); B = cc_RGBV_arr[2] = getBlue(color_arr[n][0]); RGBtoHSV(R, G, B); } function get_RGB(x) { if (cc_RGBV_down < 3) {cc_RGBV_arr[cc_RGBV_down] = Math.max(Math.min(Math.round((x - cc_RGBV_x) / cc_RGB_step), 255), 0); RGBtoHSV(cc_RGBV_arr[0], cc_RGBV_arr[1], cc_RGBV_arr[2]); cc_RGBV_arr[3] = V; } if (cc_RGBV_down == 3) {cc_RGBV_arr[cc_RGBV_down] = Math.max(Math.min(Math.round((x - cc_RGBV_x) / cc_V_step), 100), 0); cc_RGB = HSVtoRGB(H, S, cc_RGBV_arr[3]); cc_RGBV_arr[0] = getRed(cc_RGB); cc_RGBV_arr[1] = getGreen(cc_RGB); cc_RGBV_arr[2] = getBlue(cc_RGB); } selected_color = color_arr[color_arr_down.indexOf(true)][1]; window.SetProperty("custom color: " + selected_color, RGB(cc_RGBV_arr[0], cc_RGBV_arr[1], cc_RGBV_arr[2])); window.SetProperty("custom color on: " + selected_color, true); color_arr[color_arr_down.indexOf(true)][0] = RGB(cc_RGBV_arr[0], cc_RGBV_arr[1], cc_RGBV_arr[2]); ini_color(); window.Repaint(); } function mouse_on_RGBV_bar(x, y) { for (var i in cc_RGBV_y_arr) { if (y > cc_RGBV_y_arr[i] && y < (cc_RGBV_y_arr[i] + cc_bar_h)) return i; } } function mouse_on_color_arr(x, y) { for (var i in color_arr_y_arr) { if (y > color_arr_y_arr[i] && y < (color_arr_y_arr[i] + cc_bar_h)) return i; } } function check_custom_color(n) { selected_color = color_arr[n][1]; cc_color_on = window.GetProperty("custom color on: " + selected_color); cc_color_installed = window.GetProperty("custom color: " + selected_color) != 0 ? true : false; switch (true) { case !cc_color_on && !cc_color_installed: return null; break; case cc_color_on && cc_color_installed: return true; break; case !cc_color_on && cc_color_installed: return false; break; } } function rezet_costom_colors() { for (var i = 0; i < color_arr.length; i++) { selected_color = color_arr[i][1]; window.SetProperty("custom color on: " + selected_color, false); } get_color(); ini_color(); color_arr_ini(); } function cc_panel_dim() { cc_panel_w = ww <= 300 ? ww : 300; cc_panel_x = ww <= 300 ? 0 : (ww - 300) / 2; cc_panel_y = (window.Height - cc_panel_h) / 2; cc_RGBV_x = cc_panel_x + 30; cc_RGBV_y = cc_panel_y + 25; cc_RGBV_w = cc_panel_w - 40; cc_RGB_step = cc_RGBV_w / 255; cc_V_step = cc_RGBV_w / 100; cc_RGBV_y_arr = []; for (var i = 0; i < 4; i++) { cc_RGBV_y_arr.push(cc_RGBV_y + (cc_bar_h + cc_RGBV_interval) * i); } color_name_x = cc_panel_x + 10; color_arr_y = cc_RGBV_y + (cc_bar_h + cc_RGBV_interval) * 4 + cc_bar_h; color_arr_y_arr = []; for (var i = 0; i < color_arr.length; i++) { color_arr_y_arr.push(color_arr_y + (cc_bar_h + color_arr_interval) * i); } } function RGBtoHSV(r, g, b) { var r = (r / 255);   var g = (g / 255); var b = (b / 255); var min = Math.min( r, g, b );     var max = Math.max( r, g, b );    var delta = max - min;              v = max; if (delta == 0) { h = 0;                            s = 0; } else { s = delta / max; delta_r = (((max - r) / 6) + (delta / 2)) / delta; delta_g = (((max - g) / 6) + (delta / 2)) / delta; delta_b = (((max - b) / 6) + (delta / 2)) / delta; if (r == max) { h = delta_b - delta_g; } else if (g == max) { h = (1 / 3) + delta_r - delta_b; } else if (b == max) { h = (2 / 3) + delta_g - delta_r; } if ( h < 0 ) h += 1; if ( h > 1 ) h -= 1; } H = Math.round(h * 360); S = Math.round(s * 100); V = Math.round(v * 100); cc_RGBV_arr[3] = V; } function HSVtoRGB(h, s, v) { var h = h / 360; var s = s / 100; var v = v / 100; if (s == 0) { var r = v * 255; var g = v * 255; var b = v * 255; } else { h = h * 6; if ( h == 6 ) h = 0; var var_i = Math.floor( h ); var var_1 = v * (1 - s); var var_2 = v * (1 - s * (h - var_i)); var var_3 = v * (1 - s * (1 - (h - var_i))); if      (var_i == 0) {r = v; g = var_3; b = var_1} else if (var_i == 1) {r = var_2; g = v; b = var_1} else if (var_i == 2) {r = var_1; g = v; b = var_3} else if (var_i == 3) {r = var_1; g = var_2; b = v} else if (var_i == 4) {r = var_3; g = var_1; b = v} else {r = v; g = var_1; b = var_2}; r = r * 255;           g = g * 255; b = b * 255; } return RGB( Math.round(r), Math.round(g), Math.round(b)); } function print(msg) { console.log(msg); }