Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==PREPROCESSOR==
- // @name "LIBRARY PANEL TREE"
- // @version "1.0"
- // @author "Vo Thanh Dat"
- // @feature "watch-metadb"
- // @tooltip "custom-paint"
- // ==/PREPROCESSOR==
- var form_text = "",
- form_text_b = "",
- form_text_b_ = "",
- form_his = [],
- form_his_ = [];
- var char_index = [],
- playlist = [],
- playlist_dr = [],
- index_search = [],
- index_search_ = [],
- index_path = [],
- list = plman.GetPlaylistItems(-1),
- list_;
- var m_x = 0,m_y = 0,
- ww = 0,wh = 0,
- bold_start = 0,bold_end = 0,
- mm_x = 0,mm_y =0,m_tam = -1,
- idx_idx = 0, scroll = 0,scroll_ = 0,scroll__ = 0,scroll___ = 0,
- mouse_index = -1,
- form_text_cusor = 0,
- form_text_cusor_x = 0,
- repaint_visible = 0,
- time_dl = 0;
- var time111 = (new Date().getTime()),
- time222 = time111,
- time333 = time111;
- var fso = new ActiveXObject("Scripting.FileSystemObject"),
- WshShell = new ActiveXObject("WScript.Shell"),
- htmlfile = new ActiveXObject('htmlfile'),
- vbe = new ActiveXObject('ScriptControl');
- var time_h = fb.CreateProfiler(),
- time_repaint = fb.CreateProfiler(),
- time200 = fb.CreateProfiler("aaaa"),
- time_s = fb.CreateProfiler();
- var mouse_l_hold = false,mouse_l_hold_f = false,
- window_visible = false,on_form = false,
- mouse_hold = false,mouse_drag = false,
- hold_shift = false,hold_ctrl = false,
- hold_scroll = false,mouse_in = false,
- repaint_f1 = false,repaint_f2 = false,repaint_f = false,
- repaint_main = true,repaint_main1 = true,repaint_main2 = true,
- form_text_cusor_hiden = true;
- var shift_index = 0,
- last_choose = -1,
- selected_cusor = -1;
- var grouph_by = window.GetProperty("Grouph by",0),
- auto_colapse = window.GetProperty("auto colapse",false),
- auto_exppant = window.GetProperty("auto exppant",false),
- show_scripts = window.GetProperty("show_scripts",false),
- grouph_option = window.GetProperty("grouph_option",""),
- search_async = window.GetProperty("search_async",true),
- font_size = window.GetProperty("font_size",11),
- library_path = window.GetProperty("Library path",""),
- istranparent = window.GetProperty("tranparent",true),
- heigh_row = window.GetProperty("heigh_row",18),
- Tooltip = window.GetProperty("Tooltip",true),
- Font_name = window.GetProperty("Font_name","Tahoma"),
- time_delay_search = window.GetProperty("time_delay_search",200);
- var g_tooltip = window.CreateTooltip(),
- time_tooltip = fb.CreateProfiler("Time tooltip"),
- tooltip_state = false,time_tooltip_ = 0;
- g_tooltip.Text = " ";
- var qsearch = "",
- qsearch_t = fb.CreateProfiler(),
- qsearch_lidx = [],qsearch_idx = 0;
- var main_data = {addlog:function(){}};
- g_tooltip.SetDelayTime(3, 0);
- var library_path_ = library_path.split(";");
- var choose_playlist = plman.GetPlaylistItems(-1);
- var time_debug = [],time_c = 0;
- var color_text = 0xffffffff;
- var background_color = 0xff000000;
- var choose_background_color = 0xff0099ff;
- var art_alb_sort = "\\%album artist%|%album%|%track number%|%title%";
- var alb_sort = "\\%album%|%track number%|%title%";
- var grouph_opt = grouph_option.split("|");
- var g_font,g_font2,g_font3,g_font_q,g_font_marker;
- var img_blend_1,img_blend_2;
- var playlist_cache_name = "WSH Library Filter";
- setfont();
- var exppant_,
- research = false,
- search_done = false,
- research_k = 0
- research_count = 0;
- vbe.Language = 'VBScript';
- window.DlgCode = 0x0081 ;
- var lib_search = "";
- function indexer(){
- var total = list.Count;
- index_search = [];
- index_path = [];
- index_path_ = [];
- var TitleFormat = "%title% ^^ %album artist% ^^ %album% ^^ %genre% ^^ %path% ^^ %composer% ^^ %performer% ^^ %comment% ^^ $select(%rating%,>,>>,>>>,>>>>,>>>>>)";
- var FoobarTitleFormat = fb.TitleFormat(TitleFormat);
- var string = "", count = 0;
- for(var i = 0;i < total;i++){
- string = FoobarTitleFormat.EvalWithMetadb(list.Item(i));
- index_search[count] = string;
- index_search_[count] = string.toLowerCase();
- count++;
- }
- switch(grouph_by){
- case 0:
- for(var i = 0;i < total;i++){
- string = index_search[i].split(" ^^ ")[4];
- for(var j = 0;j < library_path_.length;j++)
- string = string.replace(library_path_[j],"");
- index_path[i] = string.split("\\")[0];
- }
- break;
- case 1:
- for(var i = 0;i < total;i++){
- string = index_search[i].split(" ^^ ")[1];
- index_path[i] = (string.length < 2)?"Unknow Artist":string;
- }
- break;
- case 2:
- for(var i = 0;i < total;i++){
- string = index_search[i].split(" ^^ ")[2];
- index_path[i] = (string.length < 2)?"Unknow Album":string;
- }
- break;
- default:
- for(var i = 0;i < total;i++){
- index_path[i] = fb.TitleFormat(grouph_opt[0]).EvalWithMetadb(list.Item(i));
- }
- break;
- }
- }
- function get_library(reload){
- var Time_library = fb.CreateProfiler("Time Out Refresh library");
- var pl_name = "", pl_idx = -1,list_,sort_patten;
- for(var i=0; i < plman.PlaylistCount; i++) {
- pl_name = plman.GetPlaylistName(i);
- if(pl_name == "WSH Library Filter") {
- pl_idx = i;
- break;
- }
- }
- switch(grouph_by){
- case 1:sort_patten = art_alb_sort; break;
- case 2:sort_patten = alb_sort; break;
- case 3:sort_patten = grouph_option; break;
- }
- if(pl_idx < 0) {
- pl_idx = plman.PlaylistCount;
- fb.CreateAutoPlaylist(pl_idx,playlist_cache_name,"NOT %path% HAS MIDI_library","");
- list = plman.GetPlaylistItems(pl_idx);
- if(grouph_by == 0) list.OrderByRelativePath();
- else list.OrderByFormat(fb.TitleFormat(sort_patten), 1);
- plman.RemovePlaylist(pl_idx);
- plman.CreatePlaylist(pl_idx,playlist_cache_name);
- plman.InsertPlaylistItems(pl_idx,0,list);
- }else if(reload == 1){
- fb.RemovePlaylist(pl_idx);
- fb.CreateAutoPlaylist(pl_idx,playlist_cache_name,"NOT %path% HAS MIDI_library","");
- list = plman.GetPlaylistItems(pl_idx);
- if(grouph_by == 0) list.OrderByRelativePath();
- else list.OrderByFormat(fb.TitleFormat(sort_patten), 1);
- plman.RemovePlaylist(pl_idx);
- plman.CreatePlaylist(pl_idx,playlist_cache_name);
- plman.InsertPlaylistItems(pl_idx,0,list);
- }else if(reload == 2){
- (grouph_by == 0) && list.OrderByRelativePath();
- (grouph_by > 0) && list.OrderByFormat(fb.TitleFormat(sort_patten), 1);
- plman.RemovePlaylist(pl_idx);
- plman.CreatePlaylist(pl_idx,playlist_cache_name);
- plman.InsertPlaylistItems(pl_idx,0,list);
- }else
- list = plman.GetPlaylistItems(pl_idx);
- main_data.addlog("Time get library : " + Time_library.Time + " ms")
- Time_library.Reset();
- indexer();
- main_data.addlog("Time indexer library : " + Time_library.Time + " ms")
- }
- function match(input, str){
- for(var i in str){
- if(input.indexOf(str[i]) < 0)
- return false;
- }
- return true;
- }
- function prcess_string(str){
- str_ = [];
- str = str.toLowerCase();
- var str = str.split(" ").sort();
- for(var i in str){
- if(str[i] != "")
- str_.push(str[i]);
- }
- return str_;
- }
- var timeaaaa = fb.CreateProfiler();
- function get_pl_tree(start,string_,force){
- var Time = fb.CreateProfiler();
- if(start == null){
- scroll = 0;start = 0;form_text_b_ = form_text;
- string_ = form_text;
- playlist = [];
- list_ = plman.GetPlaylistItems(-1);
- timeaaaa.Reset();
- }else if(form_text_b_ != form_text){
- fb.trace("Break -- -- -- -- Form text change");
- return;
- }
- var i = playlist.length,k = start,temp = "";
- str = prcess_string(form_text);
- var path = "",string_add = "",temp = "",string = "",total = list.Count,count = 0;
- var string_compare = (i > 0)?(playlist[i-1].name):"123456789123456789";
- while(k < total){
- count = 0;
- while(count < 200 && k < total){
- count++;
- if(!match(index_search_[k],str)){
- k++;continue;
- }
- string = index_search[k];
- temp = index_path[k];
- if(string_compare.toUpperCase() != temp.toUpperCase()){
- string_compare = temp;
- playlist[i] = new Object();
- playlist[i].name = temp;
- playlist[i].alpha = 0;
- playlist[i].child = [];
- playlist[i].pl = plman.GetPlaylistItems(-1);
- playlist[i].pl.Add(list.Item(k));
- i++;
- }else{
- playlist[i-1].pl.Add(list.Item(k));
- }
- k++;
- }
- if(!force && Time.Time > 30){
- research = true;
- research_k = k;
- research_count++;
- return;
- }
- }
- repaint_main1 = repaint_main2;
- //fb.trace("Timeout break : " + Time.Time);
- fb.trace("Searching : " + timeaaaa.Time/1000 + " ms\t" + (research_count + 1) + " Cycle");
- research_count = 0;
- tree_to_list(playlist,0);
- if(auto_exppant && playlist.length == 1)
- tree_expant(playlist[0]);
- }
- function tree_minimum(obj){
- obj.child = [];
- tree_to_list(playlist,0);
- }
- function tree_collasp(obj){
- var child_ = 0;
- if(obj.lv == 0){
- for(var i = 0;i < playlist.length;i++){
- child_ += playlist[i].child.length;
- playlist[i].child = [];
- }
- }else{
- var parrent = playlist_dr[obj.pr];
- for(var i = 0;i < parrent.child.length;i++){
- child_ += parrent.child[i].child.length;
- parrent.child[i].child = [];
- }
- }
- return child_;
- }
- function sorrt(a,b){
- return (a.name > b.name)?1:-1;
- }
- function tree_expant(obj){
- var i = 0,j = 0,k = 0;
- var path = "",string_compare = "123456789123456798",string_add = "",temp = "",meta,album_artist = "",title = "",item__ = false,track = "";
- var FoobarTitleFormat = fb.TitleFormat(" $caps([$num(%track number%,2). ] %title% [- %album artist%])");
- while(k < obj.pl.Count){
- path = get_fol_path(obj.pl.Item(k),obj.lv+1);
- if(obj.leaf){
- k++;
- continue;
- }
- item__ = false;
- if(path == "aaaaaa"){
- path = FoobarTitleFormat.EvalWithMetadb(obj.pl.Item(k));
- item__ = true;
- }
- if(string_compare.toUpperCase() != path.toUpperCase()){
- string_compare= path;
- obj.child[i] = new Object();
- obj.child[i].name = path;
- obj.child[i].alpha = 0;
- obj.child[i].child = [];
- obj.child[i].leaf = item__;
- obj.child[i].pl = plman.GetPlaylistItems(-1);
- obj.child[i].pl.Add(obj.pl.Item(k));
- i++;
- }else{
- obj.child[i-1].pl.Add(obj.pl.Item(k));
- }
- k++;
- }
- obj.child.sort(sorrt);
- tree_to_list(playlist,0);
- if(auto_exppant && obj.child.length == 1 && !obj.child[0].leaf){
- tree_expant(obj.child[0]);
- }
- }
- function tree_to_list(obj,lv){
- var parrent = playlist_dr.length - 1;
- if(lv == 0)
- playlist_dr = [];
- for(var i = 0;i < obj.length;i++){
- var idx = playlist_dr.length;
- playlist_dr[idx] = obj[i];
- playlist_dr[idx].lv = lv;
- playlist_dr[idx].pr = parrent;
- playlist_dr[idx].idx = idx;
- playlist_dr[idx].choose = false;
- //if(exppant_ == obj[i])
- // scroll = (idx- Math.round(m_y/heigh_row-1.5))*heigh_row;
- if(obj[i].child.length > 0){
- tree_to_list(obj[i].child,lv+1);
- }
- }
- }
- function get_fol_path(item,lv){
- switch(grouph_by){
- case 0:
- var string = item.Path;
- for(var i = 0;i < library_path_.length;i++)
- string = string.replace(library_path_[i],"");
- for(var i = 0;i < lv && string.indexOf("\\") != -1;i++)
- string = string.substr(string.indexOf("\\")+1);
- return (string.indexOf("\\") == -1)?("aaaaaa"):(string.substring(0,string.indexOf("\\")));
- break;
- case 1:
- switch(lv){
- case 0:
- return fb.TitleFormat("$caps($if(%album artist%,%album artist%,Unknow Artist))").EvalWithMetadb(item);
- case 1:
- return fb.TitleFormat("$caps($if(%album%,%album%,Unknow Album))").EvalWithMetadb(item);
- default:
- return "aaaaaa";
- }
- break;
- case 2:
- if(lv == 0){
- return fb.TitleFormat("$caps($if(%album artist%,%album artist%,Unknow Artist) - $if(%album%,%album%,Unknow Album))").EvalWithMetadb(item);
- }else
- return "aaaaaa";
- break;
- default:
- if(lv < grouph_opt.length){
- return fb.TitleFormat(grouph_opt[lv]).EvalWithMetadb(item);
- }else
- return "aaaaaa";
- break;
- }
- }
- var tmp_out;
- function on_size(){
- ww = window.Width;
- wh = window.Height;
- scroll_++;
- repaint_main1 = repaint_main2;
- repaint_f1 = repaint_f2;
- tmp_out && window.ClearInterval(tmp_out);
- tmp_out = window.SetInterval(function(){
- if(window.IsVisible){
- img_blend_2 = null;
- create_blend();
- repaint_main1 = repaint_main2;
- repaint_f1 = repaint_f2;
- tmp_out && window.ClearInterval(tmp_out);
- }
- },500);
- }
- function get_cusor_index(x){
- var result = form_text.length;
- while(char_index[result] > x )
- result--;
- return (result > 0)?result:0;
- }
- function refresh_char_index(gr){
- char_index = [];
- for(var i = 0;i < form_text.length + 1;i++)
- char_index[i] = gr.EstimateLineWrap(form_text.substr(0,i),g_font,ww).toArray()[1];
- }
- function on_mouse_lbtn_up(x,y,mask){
- if(mouse_drag && x > ww)
- add_playlist(choose_playlist);
- mouse_drag = mouse_hold = mouse_l_hold = mouse_l_hold_f = hold_scroll = false;
- var tam = Math.round((y + scroll - heigh_row * 0.5)/heigh_row);
- if(tam < playlist_dr.length && tam >= 0 && check_item(playlist_dr[tam],x,y)){
- (mm_x == x && mm_y == y && !utils.IsKeyPressed(0x11)) && on_chose(tam,!(mm_x == x && mm_y == y));
- }
- }
- function on_mouse_lbtn_dblclk(x,y,mask){
- var tam = Math.round((y + scroll - heigh_row*0.5)/heigh_row);
- if(tam < playlist_dr.length && tam >= 0 && check_item(playlist_dr[tam],x,y))
- apply_playlist(playlist_dr[tam].pl);
- else if(y < heigh_row)
- on_mouse_lbtn_down(x,y,1.5);
- else
- on_mouse_lbtn_down(x,y,mask);
- }
- function check_item(obj,x,y){
- if(!obj) return false;
- return (x > (heigh_row * (obj.lv + 1)) && x < (heigh_row * (obj.lv + 1) + obj.rg));
- }
- function on_mouse_lbtn_down(x,y,mask){
- mouse_l_hold_f = on_form = (y < heigh_row);
- mouse_l_hold = !mouse_l_hold_f;
- var tam = Math.round((y + scroll - heigh_row * 0.5)/heigh_row);
- if(tam < playlist_dr.length && tam >= 0){
- var playlist_tmp = playlist_dr[tam];
- if(heigh_row * (playlist_tmp.lv + 1)> x && heigh_row * playlist_tmp.lv < x){
- //TREE EXPANT OR COLAPSE
- if(playlist_tmp.child.length > 0){
- tree_minimum(playlist_tmp);
- }else{
- exppant_ = playlist_tmp;
- auto_colapse && tree_collasp(playlist_tmp);
- tree_expant(playlist_tmp); //tree_expant(playlist_dr[tam])
- }
- }else if(check_item(playlist_tmp,x,y)){
- //ITEM CHOOSE
- mm_x = x;mm_y = y;
- mouse_drag = true;
- if(!playlist_tmp.choose){
- on_chose(tam,playlist_tmp.choose);
- selected_cusor = tam;
- mouse_hold = true;
- }
- else if(utils.IsKeyPressed(0x11)){
- on_chose(tam,playlist_tmp.choose);
- }
- }else
- on_chose(-1);
- repaint_main1 = repaint_main2;
- repaint_f1 = repaint_f2;
- }else
- on_chose(-1);
- if(playlist_dr.length * heigh_row > wh && x > ww - 8){
- hold_scroll = true;
- scroll = Math.round((((y - heigh_row) * (playlist_dr.length * heigh_row ) / (wh - heigh_row)) - (wh - heigh_row)/2)/heigh_row-0.5)*heigh_row;
- }
- }
- function on_chose(index,mouse_up){
- repaint_main1 = repaint_main2;
- if(index == -1){
- for(var k = 0;k < playlist_dr.length;k++)
- playlist_dr[k].choose = false;
- }else if((utils.IsKeyPressed(0x10) || mouse_hold) && last_choose > -1){
- choose_playlist = plman.GetPlaylistItems(-1);
- var dd = (index > last_choose)?1:-1;
- if(!utils.IsKeyPressed(0x11)){
- for(var k = 0;k < playlist_dr.length;k++)
- playlist_dr[k].choose = false;
- }
- for(var k = last_choose; ;k += dd){
- playlist_dr[k].choose = true;
- choose_playlist.AddRange(playlist_dr[k].pl);
- if(k==index)
- break;
- }
- repaint_main1 = repaint_main2;
- }else if(utils.IsKeyPressed(0x11)){
- playlist_dr[index].choose = !(playlist_dr[index].choose);
- playlist_dr[index].choose && choose_playlist.AddRange(playlist_dr[index].pl);
- last_choose = index;
- }else if(!mouse_up){
- choose_playlist = plman.GetPlaylistItems(-1);
- for(var k = 0;k < playlist_dr.length;k++)
- playlist_dr[k].choose = false;
- playlist_dr[index].choose = true;
- choose_playlist.AddRange(playlist_dr[index].pl);
- last_choose = index;
- }
- }
- function check_playlist(name){
- var pl_name = "", pl_idx = -1;
- for(var i=0; i < plman.PlaylistCount; i++) {
- pl_name = plman.GetPlaylistName(i);
- if(pl_name == name) {
- pl_idx = i;
- break;
- }
- }
- return pl_idx;
- }
- function on_char(code){
- time333 = (new Date()).getTime();
- var input = String.fromCharCode(code);
- if(on_form){
- form_text_cusor_hiden = true;
- selected_cusor = -1;
- switch(code){
- case 13://ENTER
- if(form_text.length < 3)
- break;
- str = prcess_string(form_text);
- var total = list.Count;
- var pltemp = plman.GetPlaylistItems(-1);
- for(var i = 0;i < total;i++)
- if(match(index_search_[i],str))
- pltemp.Add(list.Item(i));
- apply_playlist(pltemp);
- pltemp.Dispose();
- break;
- case 25:
- form_his.push(form_text);
- if(form_his.length > 30) form_his.shift();
- if(form_his_.length > 0) form_text = form_his_.pop() + "";
- break;
- case 26:
- form_his_.push(form_text);
- if(form_his_.length > 30) form_his.shift();
- if(form_his.length > 0) form_text = form_his.pop() + "";
- break;
- case 1://CTRL + A
- bold_start = 0;
- bold_end = form_text.length;
- break;
- case 3: // COPPY
- (bold_start != bold_end) && htmlfile.parentWindow.clipboardData.setData('text',form_text.substring(bold_start,bold_end));
- break;
- case 24://CUT
- (bold_start != bold_end) && htmlfile.parentWindow.clipboardData.setData('text',form_text.substring(bold_start,bold_end));
- case 8://DELETE
- save_form_his();
- if(bold_start == bold_end){
- form_text = form_text.substring(0,form_text_cusor-1) + form_text.substring(form_text_cusor,200);
- if(form_text_cusor > 0)
- form_text_cusor--;
- bold_end = bold_start = form_text_cusor;
- }else{
- form_text = form_text.substring(0,bold_start) + form_text.substring(bold_end,200);
- form_text_cusor = bold_start;
- bold_end = bold_start;
- }
- break;
- case 22://CTRL + V//PASTE
- input = htmlfile.parentWindow.clipboardData.getData('text');
- default: //CHAR
- save_form_his();
- if(char_index[form_text.length] + heigh_row >= ww - 10)
- break;
- if(bold_start == bold_end){
- form_text = form_text.substring(0,form_text_cusor) + input + form_text.substring(form_text_cusor,200);
- form_text_cusor += input.length;
- bold_end = bold_start = form_text_cusor;
- }else{
- form_text = form_text.substring(0,bold_start) + input + form_text.substring(bold_end,200);
- form_text_cusor = bold_start + input.length;
- bold_end = bold_start;
- }
- break;
- }
- repaint_f1 = repaint_f2;
- }else{
- //qsearch_t
- var str,end_,lg,i,search_ = true;
- qsearch_t.Reset();
- switch(code){
- case 13://ENTER
- qsearch = "";
- break;
- case 8://DELETE
- qsearch = qsearch.substr(0,qsearch.length - 1);
- break;
- case 60: case 44:
- qsearch_idx--;
- search_ = false;
- break;
- case 62: case 46:
- qsearch_idx++;
- search_ = false;
- break;
- case 39 : case 37 :
- search_ = false;
- break;
- break;
- default:
- qsearch += input;
- break;
- }
- str = prcess_string(qsearch == ""?"@@@@":qsearch);
- choose_playlist = plman.GetPlaylistItems(-1);
- end_ = playlist_dr.length;
- if(search_){
- str = prcess_string(qsearch == ""?"@@@@":qsearch);
- qsearch_lidx = [];
- for(i = 0;i < end_;i++){//String.toLowerCase
- if(match(playlist_dr[i].name.toLowerCase(),str)){
- qsearch_lidx[qsearch_lidx.length] = i;
- playlist_dr[i].choose = true;
- choose_playlist.AddRange(playlist_dr[i].pl);
- }else
- playlist_dr[i].choose = false;
- }
- }else
- for(i = 0;i < end_;i++) playlist_dr[i].choose = false;
- lg = qsearch_lidx.length;
- qsearch_idx += lg;
- if(lg != 0){
- selected_cusor = qsearch_lidx[qsearch_idx%lg];
- scroll = (selected_cusor - 5) * heigh_row;
- !search_ && on_chose(selected_cusor);
- }
- repaint_main1 = repaint_main2;
- }
- }
- function save_form_his(){
- if(time_h.Time < 100)
- return;
- form_his.push(form_text);
- form_his_ = [];
- if(form_his.length > 30) form_his.shift();
- time_h.Reset();
- }
- function on_key_down(vkey) {
- switch(vkey){
- case 0x25:case 0x27:
- if(on_form){
- if(vkey == 0x25 && form_text_cusor > 0)
- form_text_cusor--;
- if(vkey == 0x27 && form_text_cusor < form_text.length)
- form_text_cusor++;
- if(hold_shift){
- bold_start = Math.min(form_text_cusor,shift_index);
- bold_end = Math.max(form_text_cusor,shift_index);
- }else
- bold_start = bold_end = form_text_cusor;
- }else if(selected_cusor >= 0){
- on_form = false;
- if(vkey == 0x25){
- if(playlist_dr[selected_cusor].child.length > 0){
- var tmp = playlist_dr[selected_cusor];
- tree_minimum(tmp);
- on_chose(tmp.idx);
- selected_cusor = tmp.idx;
- }else try{
- var tmp = playlist_dr[playlist_dr[selected_cusor].pr];
- tree_minimum(tmp);
- on_chose(tmp.idx);
- selected_cusor = tmp.idx;
- }catch(err){ };
- }else{
- var tmp = playlist_dr[selected_cusor];
- auto_colapse && tree_collasp(tmp);
- tree_expant(tmp);
- on_chose(tmp.idx);
- selected_cusor = tmp.idx;
- }
- if((selected_cusor + 1 ) * heigh_row > (scroll + wh))
- scroll = (selected_cusor + 2) * heigh_row - Math.round(wh / heigh_row)* heigh_row;
- else if((selected_cusor - 1) * heigh_row - scroll < 0)
- scroll = (selected_cusor - 1) * heigh_row;
- repaint_main1 = repaint_main2;
- }
- break;
- case 0x10:
- hold_shift = true;
- shift_index = form_text_cusor;
- break;
- case 0x11:
- hold_ctrl = true;
- break;
- case 13:
- if(on_form)return;
- if(choose_playlist.Count == 0) return;
- apply_playlist(choose_playlist);
- break;
- case 40:case 38:
- if(playlist_dr.length == 0)
- break;
- if((selected_cusor == 0 && vkey == 38)||(selected_cusor == playlist_dr.length - 1 && vkey == 40)){
- repaint_main1 = repaint_main2;
- form_text_cusor_hiden = !form_text_cusor_hiden;
- on_form = true;
- on_mouse_lbtn_down(ww - 21,10,0);
- on_chose(-1);
- break;
- }
- (vkey == 40) && selected_cusor++;
- (vkey == 38) && selected_cusor--;
- selected_cusor = (selected_cusor + playlist_dr.length)% playlist_dr.length;
- if((selected_cusor + 2) * heigh_row - (scroll + wh - heigh_row) > 0)
- scroll = (selected_cusor + 3) * heigh_row - Math.round(wh / heigh_row - 1)* heigh_row;
- else if((selected_cusor - 1) * heigh_row - scroll < 0)
- scroll = (selected_cusor - 1) * heigh_row;
- on_chose(selected_cusor);
- on_form = false;
- repaint_main1 = repaint_main2;
- break;
- case 46:
- on_key_down(39);
- on_char(8);
- break;
- }
- repaint_f1 = repaint_f2;
- form_text_cusor_hiden = true;
- }
- function on_key_up(vkey){
- switch(vkey){
- case 0x10:
- hold_shift = false;
- shift_index = form_text_cusor;
- break;
- case 0x11:
- hold_ctrl = false;
- break;
- }
- }
- function on_mouse_move(x,y){
- if(m_x == x && m_y == y)
- return;
- mouse_in = true;
- if(y < heigh_row && x < ww - heigh_row)
- window.SetCursor(32513);
- else
- window.SetCursor(32512);
- if(y < heigh_row && mouse_l_hold_f){
- bold_start = form_text_cusor;
- bold_end = get_cusor_index(x);
- if(bold_start > bold_end){
- var tam = bold_start;
- bold_start = bold_end;
- bold_end = tam;
- }
- repaint_f1 = repaint_f2;
- }
- if(m_x > ww-heigh_row && m_y < heigh_row)
- repaint_f1 = repaint_f2;
- m_x = x;m_y = y;
- var tam = Math.round((y - heigh_row*0.5)/heigh_row);
- if(tam < playlist_dr.length && tam >= 0){
- repaint_main1 = repaint_main2;
- }
- if(hold_scroll){
- scroll = Math.round((((y - heigh_row) * (playlist_dr.length * heigh_row ) / (wh - heigh_row)) - (wh - heigh_row)/2)/heigh_row-0.5)*heigh_row;
- }
- time_tooltip.Reset();
- }
- function on_mouse_leave(){
- m_x = x_y = 0;
- mouse_drag = mouse_hold = mouse_in = false;
- }
- function apply_playlist(playlist){
- var pl_idx = check_playlist("Wsh search");
- if(pl_idx == -1){
- pl_idx = fb.PlaylistCount;
- fb.CreatePlaylist(pl_idx,"Wsh search");
- }else{
- fb.ActivePlaylist = pl_idx;
- fb.RunMainMenuCommand("Edit/Clear");
- }
- fb.ActivePlaylist = pl_idx;
- var playlist_ = playlist.Clone();
- playlist_.OrderByFormat(fb.TitleFormat("$if([%album artist%],%album artist%,zzzz)|$if([%album%],[%date%]%album%,zzzz)|$if(%track number%,%track number%,zzzz)|$sub(5,%rating%)|%title%"),1);
- plman.InsertPlaylistItems(pl_idx,1,playlist_);
- fb.ActivePlaylist = pl_idx;
- plman.ExecutePlaylistDefaultAction(pl_idx,0);
- fb.RunMainMenuCommand("Edit/Remove Duplicates");
- }
- function add_playlist(playlist){
- playlist.OrderByFormat(fb.TitleFormat("$if([%album artist%],%album artist%,zzzz)|$if([%album%],[%date%]%album%,zzzz)|$if(%track number%,%track number%,zzzz)|$sub(5,%rating%)|%title%"),1);
- plman.InsertPlaylistItems(fb.ActivePlaylist,plman.PlaylistItemCount(fb.ActivePlaylist),playlist);
- fb.RunMainMenuCommand("Edit/Remove Duplicates");
- }
- function on_mouse_mbtn_down(x,y,mask){
- var tam = Math.round((y + scroll - heigh_row*0.5)/heigh_row);
- if(tam < playlist_dr.length && tam >= 0)
- check_item(playlist_dr[tam],x,y) && add_playlist(playlist_dr[tam].pl);
- }
- function on_paint(gr){
- !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, 0xff000000);
- repaint_main = false;
- var index = 0,j = 0,start_ = 0,end_ = 0,alpha = 0;
- var count_,head_,name_,width_,left_mg;
- var width_aaa = gr.CalcTextWidth("(+) ",g_font);
- start_ = Math.round(scroll_/heigh_row - 0.5);
- end_ = Math.round((scroll_ + wh)/heigh_row - 0.5);
- end_ = (playlist_dr.length < end_)?playlist_dr.length:end_;
- for(var i = start_;i < end_;i++){
- alpha = (playlist_dr[i].alpha<<24)|0xffffff;
- count_ = (playlist_dr[i].pl.Count >1)?(" (" +playlist_dr[i].pl.Count + ")"):("");
- head_ = playlist_dr[i].leaf?"✚ ":((playlist_dr[i].child.length < 1)?"[+] ":"[--] ");
- name_= head_ + playlist_dr[i].name + count_ + "";
- width_ = gr.CalcTextWidth(name_,g_font) - (playlist_dr[i].leaf?0:width_aaa) + heigh_row * 0.2;
- playlist_dr[i].rg = width_ - (playlist_dr[i].leaf?heigh_row:0);
- playlist_dr[i].choose ?(playlist_dr[i].alpha += time_dl * 2)
- :((mouse_index != i) && (playlist_dr[i].alpha -= time_dl * 0.7));
- playlist_dr[i].alpha = Math.max(0,Math.min(255,playlist_dr[i].alpha));
- (playlist_dr[i].alpha % 255 !=0) && (repaint_main1 = repaint_main2);
- (playlist_dr[i].alpha > 0) && gr.FillSolidRect((heigh_row * playlist_dr[i].lv) + (playlist_dr[i].leaf?0:width_aaa),Math.floor(i* heigh_row - scroll_ + 1),width_,Math.floor(heigh_row*0.95),(choose_background_color & alpha));
- playlist_dr[i].choose && gr.DrawRect((heigh_row * playlist_dr[i].lv) + (playlist_dr[i].leaf?0:width_aaa),Math.floor(i* heigh_row - scroll_ + 1),width_, Math.floor(heigh_row*0.95 - 1),1,0xff00ffff);
- left_mg = heigh_row * (playlist_dr[i].lv + 0.1);
- gr.GdiDrawText(name_, g_font, color_text,left_mg,heigh_row * (i + 0.1)- scroll_, ww - left_mg, heigh_row, 0);
- }
- // Draw Qsearch
- gr.SetSmoothingMode(4);
- if(qsearch_t.Time < 500 && qsearch != ""){
- var wid = gr.CalcTextWidth(qsearch,g_font_q) + 25;
- var hei = heigh_row * 1.5;
- gr.DrawRoundRect(ww/2 - wid/2, wh/2 - hei/2, wid, hei, 5, 5, heigh_row * 0.1, 0xaaffffff);
- gr.FillRoundRect(ww/2 - wid/2, wh/2 - hei/2, wid, hei, 5, 5, 0x77000000);
- gr.GdiDrawText(qsearch, g_font_q, 0xff000000,ww/2 - wid/2 + 2, wh/2 - hei/2 + heigh_row * 0.2 + 2, wid, hei, 0x05);
- gr.GdiDrawText(qsearch, g_font_q, color_text,ww/2 - wid/2, wh/2 - hei/2 + heigh_row * 0.2, wid, hei, 0x05);
- }
- //Draw Scoll Bar
- if(playlist_dr.length * heigh_row > wh - heigh_row){
- var hei = playlist_dr.length * heigh_row;
- //gr.FillGradRect(ww-7,heigh_row,7,wh-heigh_row,0,0x60000000,0x60000000);
- gr.FillGradRect(ww-6,heigh_row + (scroll_*(wh-heigh_row)/hei),5,((wh-heigh_row)*(wh-heigh_row)/hei)-1,0,hold_scroll ? 0xa0aaaaaa:0xa0ffffff ,hold_scroll ? 0xa0aaaaaa:0xa0ffffff);
- }
- //Draw Blend
- if(img_blend_2)
- gr.GdiAlphaBlend(img_blend_2,0,wh * 39 / 40,ww,img_blend_2.Height,0,1,ww,img_blend_2.Height - 1,255);
- }
- function on_timer_(g_time333){
- var repaint_1 = false,repaint_2 = false;
- time_dl = time_s.Time;
- time_s.Reset();
- if(research){
- research = false;
- get_pl_tree(research_k,form_text);
- return;
- }
- var d = new Date();
- if(d.getTime() - time222 < 15)
- return
- else
- time222 = d.getTime();
- if(d.getTime() - time333 > time_delay_search && on_form && form_text_b != form_text){
- time333 = d.getTime();
- form_text_b = form_text;
- lib_search = form_text;
- get_pl_tree();
- }
- mouse_index = -1;
- var tam = check_item_index(m_x,m_y);
- if(tam != -1){
- if(qsearch == "")
- playlist_dr[tam].alpha = Math.min(playlist_dr[tam].alpha + 40,255);
- if(m_tam != tam){
- mouse_hold && on_chose(tam);
- deactive_tooltip();
- }else{
- Tooltip && (time_tooltip_ += time_dl);
- }
- if(Tooltip && time_tooltip_ > 3000 && !tooltip_state && (heigh_row * (playlist_dr[tam].lv + 1) + playlist_dr[tam].rg) > ww && playlist_dr[tam].alpha > 250){
- g_tooltip.Width = playlist_dr[tam].rg;
- g_tooltip.Height = heigh_row;
- active_tooltip();
- g_tooltip.TrackPosition(heigh_row * (playlist_dr[tam].lv + 1), Math.floor((m_y+1) / heigh_row) * heigh_row - 1);
- g_tooltip.Text = " ";
- }else
- deactive_tooltip();
- mouse_index = tam;
- m_tam = tam;
- }
- if(qsearch_t.Time > 1500 && qsearch != ""){
- repaint_2 = true;
- qsearch = "";
- }
- if(time_tooltip.Time > 7000){
- deactive_tooltip();
- }
- if(d.getTime() - time111 > 600 && on_form){
- form_text_cusor_hiden = !form_text_cusor_hiden;
- time111 = d.getTime();
- repaint_1 = true;
- }
- if(repaint_f1 == repaint_f2){
- repaint_f2 = !repaint_f1;
- repaint_1 = true;
- }
- if(repaint_main1 == repaint_main2){
- repaint_main2 = !repaint_main1;
- repaint_2 = true;
- }
- scroll = check_scroll(scroll);
- if(Math.abs(scroll - scroll_) > 0.5){
- scroll___ += (scroll - scroll___) * (1-Math.pow(0.9,time_dl/4));
- scroll__ += (scroll___ - scroll__) * (1-Math.pow(0.9,time_dl/4));
- scroll_ += (scroll__ - scroll_) * (1-Math.pow(0.9,time_dl/4));
- time_tooltip.Reset();
- repaint_2 = true;
- }
- if(repaint_1 || repaint_2){
- time_s.Reset();
- repaint_main = true;
- repaint_f = true;
- window.Repaint();
- }
- }
- function check_item_index(x,y){
- var tam = Math.round((y + scroll_ - heigh_row*0.5)/heigh_row);
- if(playlist_dr.length > tam && tam >= 0 && x < ww -10 && y > heigh_row && check_item(playlist_dr[tam],x,y))
- return tam;
- else return -1;
- }
- var notifi = true;
- function setfont(){
- if(!utils.CheckFont(Font_name)){
- notifi && fb.ShowPopupMessage("Stub image not found.\r\nGo to Properties to config Stub image path.");
- notifi = false;
- }
- g_font = gdi.Font(Font_name, font_size, 0);
- g_font2 = gdi.Font(Font_name, font_size, 1);
- g_font3 = gdi.Font(Font_name, font_size, 2);
- g_font_q = gdi.Font(Font_name, font_size*1.5, 2);// g_font_q = gdi.Font("Tahoma", font_size + 10, 2),
- g_font_marker = gdi.Font(Font_name, font_size, 1);
- }
- function on_mouse_wheel(step){
- if(utils.IsKeyPressed(0x11)){
- font_size += step;
- if(font_size > 30)
- font_size = 30;
- else if(font_size < 10)
- font_size = 10;
- window.SetProperty("font_size",font_size);
- setfont();
- scroll = scroll_ = scroll__ = scroll___ = scroll/heigh_row;
- heigh_row = Math.floor(font_size*16/11);
- scroll = scroll_ = scroll__ = scroll___ = scroll * heigh_row;
- window.SetProperty("heigh_row",heigh_row);
- repaint_f1 = repaint_f2;repaint_main1 = repaint_main2;
- return;
- }
- repaint_main1 = repaint_main2;
- scroll -= step*heigh_row*2;
- scroll = check_scroll(scroll);
- }
- function check_scroll(scroll___){
- scroll___ = Math.round(scroll___ / heigh_row ) * heigh_row;
- if(scroll___ > ((playlist_dr.length + 2 )* heigh_row - wh ))
- scroll___ = Math.round(((playlist_dr.length + 2 )* heigh_row - wh )/heigh_row - 0.5)*heigh_row;
- if(playlist_dr.length*heigh_row < wh - heigh_row)
- scroll___ = 0;
- if(scroll___ < 0)
- scroll___ = 0;
- return scroll___;
- }
- function on_mouse_rbtn_up(x, y){
- var MF_SEPARATOR = 0x00000800;
- var MF_STRING = 0x00000000;
- var _menu = window.CreatePopupMenu();
- var _menu1 = window.CreatePopupMenu();
- var Context = fb.CreateContextMenuManager();
- var con_ = false,time_111,idx;
- _menu1.AppendMenuItem(MF_STRING, 2, "Grouph by Path");
- _menu1.AppendMenuItem(MF_STRING, 3, "Grouph by Artist - Album");
- _menu1.AppendMenuItem(MF_STRING, 4, "Grouph by Album");
- _menu1.AppendMenuItem(MF_STRING, 5, "Grouph by User");
- _menu1.AppendMenuSeparator();
- _menu1.AppendMenuItem(MF_STRING, 11, "Auto Exppant");
- _menu1.AppendMenuItem(MF_STRING, 12, "Auto Collapse");
- _menu1.AppendMenuItem(MF_STRING, 15, "Tooltip");
- _menu1.AppendMenuSeparator();
- _menu1.AppendMenuItem(MF_STRING, 9, "Reefresh Library");
- _menu1.AppendMenuItem(MF_STRING, 13, "Configure Library Path");
- show_scripts && _menu1.AppendMenuItem(MF_STRING, 1, "Show Configure Scripts");
- _menu1.AppendMenuItem(MF_STRING, 100, "Show Properties");
- _menu1.CheckMenuRadioItem(2, 5,grouph_by + 2);
- _menu1.CheckMenuItem(11,auto_exppant);
- _menu1.CheckMenuItem(12,auto_colapse);
- _menu1.CheckMenuItem(15,Tooltip);
- var tam = Math.round((y + scroll_ - heigh_row*1.5)/heigh_row);
- if(y > heigh_row && playlist_dr.length > tam && tam >= 0 && x < ww - heigh_row/2 && check_item(playlist_dr[tam],x,y)){
- !playlist_dr[tam].choose && on_chose(tam);
- _menu.AppendMenuItem(MF_STRING, 21, "Send to Playing Playlist");
- _menu.AppendMenuItem(MF_STRING, 22, "Add to Playing Playlist");
- con_ = true;
- } else
- on_chose(-1);
- _menu1.AppendTo(_menu,MF_STRING, "Preferences");
- if(con_){
- _menu.AppendMenuSeparator();
- Context.InitContext(choose_playlist);
- Context.BuildMenu(_menu, 30, -1);
- }
- idx = _menu.TrackPopupMenu(x,y);
- switch(idx) {
- case 1:
- window.ShowConfigure();
- break;
- case 2:case 3:case 4:case 5:
- grouph_by = idx-2;
- window.SetProperty("Grouph by",grouph_by);
- get_library(2);
- get_pl_tree();
- repaint_f1 = repaint_f2;
- repaint_main1 = repaint_main2;
- break;
- case 9:
- get_library(1);
- get_pl_tree();
- repaint_f1 = repaint_f2;
- repaint_main1 = repaint_main2;
- break;
- case 11:
- auto_exppant = !auto_exppant;
- window.SetProperty("auto exppant",auto_exppant);
- get_pl_tree();
- repaint_f1 = repaint_f2;
- repaint_main1 = repaint_main2;
- break;
- case 12:
- auto_colapse = !auto_colapse;
- window.SetProperty("auto colapse",auto_colapse);
- get_pl_tree();
- repaint_f1 = repaint_f2;
- repaint_main1 = repaint_main2;
- break;
- case 13:
- var lib_filter = vbe.eval("InputBox(\"Example : \" + chr(10) + \"D:\\music\\;D:\\lossless\\\" + chr(10) + \"NULL to reset default\",\"Edit library Path\",\"" + library_path + "\")");
- if(lib_filter == "NULL" || lib_filter == "null")
- library_path = "E:\\music\\lossless\\;E:\\music\\lossly\\320kps\\";
- else if(lib_filter)
- library_path = lib_filter;
- library_path_ = library_path.split(";");
- window.SetProperty("Library path",library_path);
- get_library(1);
- get_pl_tree();
- repaint_f1 = repaint_f2;
- repaint_main1 = repaint_main2;
- break;
- case 15:
- Tooltip = !Tooltip;
- window.SetProperty("Tooltip",Tooltip);
- break;
- case 21:
- apply_playlist(choose_playlist);
- break;
- case 22:
- add_playlist(choose_playlist);
- break;
- case 100:
- window.ShowProperties();
- break;
- default:
- con_ && Context.ExecuteByID(idx-30);
- break;
- }
- _menu.Dispose();
- _menu1.Dispose();
- Context.Dispose();
- return true;
- }
- function active_tooltip(){
- if(!tooltip_state){
- tooltip_state = true;
- g_tooltip.Activate();
- g_tooltip.TrackActivate = true;
- }
- }
- function deactive_tooltip(){
- if(tooltip_state){
- tooltip_state = false;
- g_tooltip.TrackActivate = false;
- g_tooltip.Deactivate();
- time_tooltip_ = 0;
- time_tooltip.Reset();
- }
- }
- function on_tooltip_custom_paint(gr){
- var tam = check_item_index(m_x,m_y);
- var dr_str = playlist_dr[tam].name + (playlist_dr[tam].leaf?(""):(" (" + playlist_dr[tam].pl.Count + ")"));
- gr.GdiDrawText(dr_str, g_font, 0xaa333333,font_size * 0.2,heigh_row * 0.1,playlist_dr[tam].rg, heigh_row, 0x804);
- }
- function create_blend(){
- ww = window.Width;
- wh = window.Height;
- try{
- background = window.GetBackgroundImage();
- x = Math.ceil(wh/40 * 39) - 1;
- w = background.Height - x;
- img1 = background.Clone(0,x ,ww,w);
- var tmp = gdi.CreateImage(ww,w);
- var gr = tmp.GetGraphics();
- gr.FillGradRect(0,0,ww,wh/40,270,0xff000000,0xffffffff,1);
- gr.FillGradRect(0,wh/80,ww,wh/80,270,0xaa000000,0x00ffffff,1);
- tmp.ReleaseGraphics(gr);
- img1.ApplyMask(tmp);
- img_blend_2 = img1.CreateRawBitmap();
- }catch(err){}
- }
- window.SetTimeout(function(){
- get_library();
- if(form_text == ""){
- get_pl_tree();
- repaint_f1 = repaint_f2;
- repaint_main1 = repaint_main2;
- }
- },1000);
- window.SetInterval(function(){
- on_timer_(0);
- },16);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement