Advertisement
Guest User

WSH LIBRARY TREE EXPLORER

a guest
May 17th, 2015
460
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==PREPROCESSOR==
  2. // @name "LIBRARY PANEL TREE"
  3. // @version "1.0"
  4. // @author "Vo Thanh Dat"
  5. // @feature "watch-metadb"
  6. // @tooltip "custom-paint"
  7. // ==/PREPROCESSOR==
  8.  
  9.  
  10. var form_text = "",
  11.     form_text_b = "",
  12.     form_text_b_ = "",
  13.     form_his = [],
  14.     form_his_ = [];
  15.  
  16. var char_index = [],
  17.     playlist = [],
  18.     playlist_dr = [],
  19.     index_search = [],
  20.     index_search_ = [],
  21.     index_path = [],
  22.     list = plman.GetPlaylistItems(-1),
  23.     list_;
  24.    
  25. var m_x = 0,m_y = 0,
  26.     ww = 0,wh = 0,
  27.     bold_start = 0,bold_end = 0,
  28.     mm_x = 0,mm_y =0,m_tam = -1,
  29.     idx_idx = 0, scroll = 0,scroll_ = 0,scroll__ = 0,scroll___ = 0,
  30.     mouse_index  = -1,
  31.     form_text_cusor = 0,
  32.     form_text_cusor_x = 0,
  33.     repaint_visible = 0,
  34.     time_dl = 0;
  35.  
  36. var time111 = (new Date().getTime()),
  37.     time222 = time111,
  38.     time333 = time111;
  39.    
  40. var fso = new ActiveXObject("Scripting.FileSystemObject"),
  41.     WshShell = new ActiveXObject("WScript.Shell"),
  42.     htmlfile = new ActiveXObject('htmlfile'),
  43.     vbe = new ActiveXObject('ScriptControl');
  44.    
  45. var time_h = fb.CreateProfiler(),
  46.     time_repaint = fb.CreateProfiler(),
  47.     time200 = fb.CreateProfiler("aaaa"),
  48.     time_s = fb.CreateProfiler();
  49. var mouse_l_hold = false,mouse_l_hold_f = false,
  50.     window_visible = false,on_form = false,
  51.     mouse_hold = false,mouse_drag = false,
  52.     hold_shift = false,hold_ctrl = false,
  53.     hold_scroll = false,mouse_in = false,
  54.     repaint_f1 = false,repaint_f2 = false,repaint_f = false,
  55.     repaint_main = true,repaint_main1 = true,repaint_main2 = true,
  56.     form_text_cusor_hiden = true;
  57.    
  58. var shift_index = 0,
  59.     last_choose = -1,
  60.     selected_cusor = -1;
  61.  
  62. var grouph_by = window.GetProperty("Grouph by",0),
  63.     auto_colapse = window.GetProperty("auto colapse",false),
  64.     auto_exppant = window.GetProperty("auto exppant",false),
  65.     show_scripts = window.GetProperty("show_scripts",false),
  66.     grouph_option = window.GetProperty("grouph_option",""),
  67.     search_async = window.GetProperty("search_async",true),
  68.     font_size = window.GetProperty("font_size",11),
  69.     library_path = window.GetProperty("Library path",""),
  70.     istranparent = window.GetProperty("tranparent",true),
  71.     heigh_row = window.GetProperty("heigh_row",18),
  72.     Tooltip = window.GetProperty("Tooltip",true),
  73.     Font_name = window.GetProperty("Font_name","Tahoma"),
  74.     time_delay_search = window.GetProperty("time_delay_search",200);
  75.    
  76. var g_tooltip = window.CreateTooltip(),
  77.     time_tooltip = fb.CreateProfiler("Time tooltip"),
  78.     tooltip_state = false,time_tooltip_ = 0;
  79.     g_tooltip.Text = " ";  
  80.    
  81. var qsearch = "",
  82.     qsearch_t = fb.CreateProfiler(),
  83.     qsearch_lidx = [],qsearch_idx = 0;
  84.  
  85. var main_data = {addlog:function(){}};
  86.    
  87. g_tooltip.SetDelayTime(3, 0);    
  88.    
  89. var library_path_ = library_path.split(";");
  90. var choose_playlist = plman.GetPlaylistItems(-1);
  91. var time_debug = [],time_c = 0;
  92. var color_text = 0xffffffff;
  93. var background_color = 0xff000000;
  94. var choose_background_color = 0xff0099ff;
  95. var art_alb_sort = "\\%album artist%|%album%|%track number%|%title%";
  96. var alb_sort = "\\%album%|%track number%|%title%";
  97. var grouph_opt = grouph_option.split("|");
  98.  
  99. var g_font,g_font2,g_font3,g_font_q,g_font_marker;
  100. var img_blend_1,img_blend_2;
  101.  
  102. var playlist_cache_name = "WSH Library Filter";
  103.  
  104. setfont();
  105.  
  106. var exppant_,
  107.     research = false,
  108.     search_done = false,
  109.     research_k = 0
  110.     research_count = 0;
  111.    
  112. vbe.Language = 'VBScript';
  113.  
  114. window.DlgCode = 0x0081 ;
  115.  
  116. var lib_search = "";
  117.  
  118.  
  119.  
  120. function indexer(){
  121.     var total = list.Count;
  122.     index_search = [];
  123.     index_path = [];
  124.     index_path_ = [];
  125.     var TitleFormat = "%title% ^^ %album artist% ^^ %album% ^^ %genre% ^^ %path% ^^ %composer% ^^ %performer% ^^ %comment% ^^ $select(%rating%,>,>>,>>>,>>>>,>>>>>)";
  126.     var FoobarTitleFormat = fb.TitleFormat(TitleFormat);
  127.     var string = "", count = 0;
  128.     for(var i = 0;i < total;i++){
  129.         string = FoobarTitleFormat.EvalWithMetadb(list.Item(i));
  130.         index_search[count] = string;
  131.         index_search_[count] = string.toLowerCase();
  132.         count++;
  133.     }
  134.     switch(grouph_by){
  135.         case 0:
  136.             for(var i = 0;i < total;i++){
  137.                 string = index_search[i].split(" ^^ ")[4];
  138.                 for(var j = 0;j < library_path_.length;j++)
  139.                     string = string.replace(library_path_[j],"");
  140.                 index_path[i] = string.split("\\")[0];
  141.             }
  142.         break;
  143.         case 1:
  144.             for(var i = 0;i < total;i++){
  145.                 string = index_search[i].split(" ^^ ")[1];
  146.                 index_path[i] = (string.length < 2)?"Unknow Artist":string;
  147.             }
  148.         break;
  149.         case 2:
  150.             for(var i = 0;i < total;i++){
  151.                 string = index_search[i].split(" ^^ ")[2];
  152.                 index_path[i] = (string.length < 2)?"Unknow Album":string;
  153.             }
  154.         break;
  155.         default:
  156.             for(var i = 0;i < total;i++){
  157.                 index_path[i] = fb.TitleFormat(grouph_opt[0]).EvalWithMetadb(list.Item(i));
  158.             }        
  159.         break;
  160.     }
  161. }
  162.  
  163. function get_library(reload){
  164.     var Time_library = fb.CreateProfiler("Time Out Refresh library");
  165.     var pl_name = "", pl_idx = -1,list_,sort_patten;
  166.     for(var i=0; i < plman.PlaylistCount; i++) {
  167.         pl_name = plman.GetPlaylistName(i);
  168.         if(pl_name == "WSH Library Filter") {
  169.             pl_idx = i;
  170.             break;
  171.         }
  172.     }
  173.     switch(grouph_by){
  174.         case 1:sort_patten = art_alb_sort;  break;
  175.         case 2:sort_patten = alb_sort;      break;
  176.         case 3:sort_patten = grouph_option; break;
  177.     }
  178.    
  179.    
  180.     if(pl_idx < 0) {
  181.         pl_idx = plman.PlaylistCount;
  182.         fb.CreateAutoPlaylist(pl_idx,playlist_cache_name,"NOT %path% HAS MIDI_library","");
  183.         list = plman.GetPlaylistItems(pl_idx);
  184.         if(grouph_by == 0) list.OrderByRelativePath();
  185.         else list.OrderByFormat(fb.TitleFormat(sort_patten), 1);
  186.         plman.RemovePlaylist(pl_idx);
  187.         plman.CreatePlaylist(pl_idx,playlist_cache_name);
  188.         plman.InsertPlaylistItems(pl_idx,0,list);
  189.     }else if(reload == 1){
  190.         fb.RemovePlaylist(pl_idx);
  191.         fb.CreateAutoPlaylist(pl_idx,playlist_cache_name,"NOT %path% HAS MIDI_library","");
  192.         list = plman.GetPlaylistItems(pl_idx);
  193.         if(grouph_by == 0) list.OrderByRelativePath();
  194.         else list.OrderByFormat(fb.TitleFormat(sort_patten), 1);
  195.         plman.RemovePlaylist(pl_idx);
  196.         plman.CreatePlaylist(pl_idx,playlist_cache_name);
  197.         plman.InsertPlaylistItems(pl_idx,0,list);
  198.     }else if(reload == 2){
  199.         (grouph_by == 0) && list.OrderByRelativePath();
  200.         (grouph_by > 0) && list.OrderByFormat(fb.TitleFormat(sort_patten), 1);
  201.         plman.RemovePlaylist(pl_idx);
  202.         plman.CreatePlaylist(pl_idx,playlist_cache_name);
  203.         plman.InsertPlaylistItems(pl_idx,0,list);  
  204.     }else
  205.         list = plman.GetPlaylistItems(pl_idx);
  206.    
  207.  
  208.     main_data.addlog("Time get library : " + Time_library.Time + " ms")
  209.  
  210.     Time_library.Reset();
  211.    
  212.     indexer();
  213.    
  214.     main_data.addlog("Time indexer library : " + Time_library.Time + " ms")
  215. }
  216.  
  217.  
  218.  
  219.  
  220. function match(input, str){
  221.     for(var i in str){
  222.         if(input.indexOf(str[i]) < 0)
  223.             return false;
  224.     }
  225.     return true;
  226. }
  227.  
  228.  
  229. function prcess_string(str){
  230.     str_ = [];
  231.     str = str.toLowerCase();
  232.     var str = str.split(" ").sort();
  233.     for(var i in str){
  234.         if(str[i] != "")
  235.             str_.push(str[i]);
  236.     }
  237.     return str_;
  238. }
  239.  
  240. var timeaaaa = fb.CreateProfiler();
  241.  
  242.  
  243. function get_pl_tree(start,string_,force){
  244.     var Time = fb.CreateProfiler();
  245.     if(start == null){
  246.         scroll = 0;start = 0;form_text_b_ = form_text;
  247.         string_ = form_text;
  248.         playlist = [];
  249.         list_ = plman.GetPlaylistItems(-1);
  250.         timeaaaa.Reset();
  251.     }else if(form_text_b_ != form_text){
  252.         fb.trace("Break -- -- -- -- Form text change");
  253.         return;
  254.     }
  255.     var i = playlist.length,k = start,temp = "";
  256.     str = prcess_string(form_text);
  257.     var path = "",string_add = "",temp = "",string = "",total = list.Count,count = 0;
  258.     var string_compare = (i > 0)?(playlist[i-1].name):"123456789123456789";
  259.    
  260.    
  261.    
  262.     while(k < total){
  263.         count = 0;
  264.         while(count < 200 && k < total){
  265.             count++;
  266.            
  267.             if(!match(index_search_[k],str)){
  268.                 k++;continue;
  269.             }
  270.             string = index_search[k];
  271.             temp = index_path[k];
  272.             if(string_compare.toUpperCase() != temp.toUpperCase()){
  273.                 string_compare = temp;
  274.                 playlist[i] = new Object();
  275.                 playlist[i].name = temp;
  276.                 playlist[i].alpha = 0;
  277.                 playlist[i].child = [];
  278.                 playlist[i].pl = plman.GetPlaylistItems(-1);
  279.                 playlist[i].pl.Add(list.Item(k));
  280.  
  281.                 i++;
  282.             }else{
  283.                 playlist[i-1].pl.Add(list.Item(k));
  284.             }
  285.             k++;
  286.         }
  287.         if(!force && Time.Time > 30){
  288.             research = true;
  289.             research_k = k;
  290.             research_count++;
  291.             return;
  292.         }
  293.     }
  294.     repaint_main1 = repaint_main2;
  295.     //fb.trace("Timeout break : " + Time.Time);
  296.     fb.trace("Searching : " + timeaaaa.Time/1000 + " ms\t" + (research_count + 1) + " Cycle");
  297.     research_count = 0;
  298.     tree_to_list(playlist,0);
  299.     if(auto_exppant && playlist.length == 1)
  300.         tree_expant(playlist[0]);
  301. }
  302.  
  303. function tree_minimum(obj){
  304.     obj.child = [];
  305.     tree_to_list(playlist,0);
  306. }
  307.  
  308. function tree_collasp(obj){
  309.     var child_ = 0;
  310.     if(obj.lv == 0){
  311.         for(var i = 0;i < playlist.length;i++){
  312.             child_ += playlist[i].child.length;
  313.             playlist[i].child = [];
  314.         }
  315.     }else{
  316.         var parrent = playlist_dr[obj.pr];
  317.         for(var i = 0;i < parrent.child.length;i++){
  318.             child_ += parrent.child[i].child.length;
  319.             parrent.child[i].child = [];
  320.         }
  321.     }
  322.     return child_;
  323. }
  324.  
  325. function sorrt(a,b){
  326.     return (a.name > b.name)?1:-1;
  327. }
  328.  
  329. function tree_expant(obj){
  330.     var i = 0,j = 0,k = 0;
  331.     var path = "",string_compare = "123456789123456798",string_add = "",temp = "",meta,album_artist = "",title = "",item__ = false,track = "";
  332.     var FoobarTitleFormat = fb.TitleFormat(" $caps([$num(%track number%,2). ] %title% [- %album artist%])");
  333.     while(k < obj.pl.Count){
  334.         path = get_fol_path(obj.pl.Item(k),obj.lv+1);
  335.         if(obj.leaf){
  336.             k++;
  337.             continue;
  338.         }
  339.         item__ = false;
  340.         if(path == "aaaaaa"){    
  341.             path = FoobarTitleFormat.EvalWithMetadb(obj.pl.Item(k));
  342.             item__ = true;
  343.         }
  344.         if(string_compare.toUpperCase() != path.toUpperCase()){
  345.             string_compare= path;
  346.             obj.child[i] = new Object();
  347.             obj.child[i].name = path;
  348.             obj.child[i].alpha = 0;
  349.             obj.child[i].child = [];
  350.             obj.child[i].leaf = item__;
  351.             obj.child[i].pl = plman.GetPlaylistItems(-1);
  352.             obj.child[i].pl.Add(obj.pl.Item(k));
  353.             i++;
  354.         }else{
  355.             obj.child[i-1].pl.Add(obj.pl.Item(k));
  356.         }
  357.         k++;
  358.     }
  359.     obj.child.sort(sorrt);
  360.     tree_to_list(playlist,0);
  361.     if(auto_exppant && obj.child.length == 1 && !obj.child[0].leaf){
  362.         tree_expant(obj.child[0]);
  363.     }
  364. }
  365.  
  366.  
  367. function tree_to_list(obj,lv){
  368.     var parrent = playlist_dr.length - 1;
  369.     if(lv == 0)
  370.         playlist_dr = [];
  371.     for(var i = 0;i < obj.length;i++){
  372.         var idx = playlist_dr.length;
  373.         playlist_dr[idx] = obj[i];
  374.         playlist_dr[idx].lv = lv;
  375.         playlist_dr[idx].pr = parrent;
  376.         playlist_dr[idx].idx = idx;
  377.         playlist_dr[idx].choose = false;
  378.         //if(exppant_ == obj[i])
  379.         //    scroll = (idx- Math.round(m_y/heigh_row-1.5))*heigh_row;
  380.         if(obj[i].child.length > 0){
  381.             tree_to_list(obj[i].child,lv+1);
  382.         }
  383.     }
  384. }
  385.  
  386. function get_fol_path(item,lv){
  387.     switch(grouph_by){
  388.         case 0:
  389.             var string = item.Path;
  390.             for(var i = 0;i < library_path_.length;i++)
  391.                 string = string.replace(library_path_[i],"");
  392.             for(var i = 0;i < lv && string.indexOf("\\") != -1;i++)
  393.                 string = string.substr(string.indexOf("\\")+1);
  394.             return (string.indexOf("\\") == -1)?("aaaaaa"):(string.substring(0,string.indexOf("\\")));
  395.         break;
  396.         case 1:
  397.             switch(lv){
  398.                 case 0:
  399.                     return fb.TitleFormat("$caps($if(%album artist%,%album artist%,Unknow Artist))").EvalWithMetadb(item);
  400.                 case 1:
  401.                     return fb.TitleFormat("$caps($if(%album%,%album%,Unknow Album))").EvalWithMetadb(item);
  402.                 default:
  403.                     return "aaaaaa";
  404.             }
  405.         break;
  406.         case 2:
  407.             if(lv == 0){
  408.                 return fb.TitleFormat("$caps($if(%album artist%,%album artist%,Unknow Artist) - $if(%album%,%album%,Unknow Album))").EvalWithMetadb(item);
  409.             }else
  410.                 return "aaaaaa";
  411.         break;
  412.         default:
  413.             if(lv < grouph_opt.length){
  414.                 return fb.TitleFormat(grouph_opt[lv]).EvalWithMetadb(item);
  415.             }else
  416.                 return "aaaaaa";
  417.         break;
  418.     }
  419. }
  420.  
  421. var tmp_out;
  422. function on_size(){
  423.     ww = window.Width;
  424.     wh = window.Height;
  425.     scroll_++;
  426.     repaint_main1 = repaint_main2;
  427.     repaint_f1 = repaint_f2;
  428.     tmp_out && window.ClearInterval(tmp_out);
  429.     tmp_out = window.SetInterval(function(){
  430.         if(window.IsVisible){
  431.             img_blend_2 = null;
  432.             create_blend();
  433.             repaint_main1 = repaint_main2;
  434.             repaint_f1 = repaint_f2;
  435.             tmp_out && window.ClearInterval(tmp_out);
  436.         }
  437.     },500);
  438. }
  439.  
  440. function get_cusor_index(x){
  441.     var result = form_text.length;
  442.     while(char_index[result] > x )
  443.         result--;
  444.     return (result > 0)?result:0;
  445. }
  446.  
  447. function refresh_char_index(gr){
  448.     char_index = [];
  449.     for(var i = 0;i < form_text.length + 1;i++)
  450.         char_index[i] = gr.EstimateLineWrap(form_text.substr(0,i),g_font,ww).toArray()[1];
  451. }
  452.  
  453. function on_mouse_lbtn_up(x,y,mask){
  454.     if(mouse_drag && x > ww)
  455.         add_playlist(choose_playlist);
  456.     mouse_drag = mouse_hold = mouse_l_hold = mouse_l_hold_f = hold_scroll = false;
  457.     var tam = Math.round((y + scroll - heigh_row * 0.5)/heigh_row);
  458.     if(tam < playlist_dr.length && tam >= 0 && check_item(playlist_dr[tam],x,y)){
  459.         (mm_x == x && mm_y == y && !utils.IsKeyPressed(0x11)) && on_chose(tam,!(mm_x == x && mm_y == y));
  460.     }
  461. }
  462.  
  463. function on_mouse_lbtn_dblclk(x,y,mask){
  464.     var tam = Math.round((y + scroll - heigh_row*0.5)/heigh_row);
  465.     if(tam < playlist_dr.length && tam >= 0 && check_item(playlist_dr[tam],x,y))
  466.          apply_playlist(playlist_dr[tam].pl);
  467.     else if(y < heigh_row)
  468.         on_mouse_lbtn_down(x,y,1.5);
  469.     else
  470.         on_mouse_lbtn_down(x,y,mask);
  471. }
  472.  
  473.  
  474. function check_item(obj,x,y){
  475.     if(!obj) return false;
  476.     return (x > (heigh_row * (obj.lv + 1)) && x < (heigh_row * (obj.lv + 1) + obj.rg));
  477. }
  478.  
  479. function on_mouse_lbtn_down(x,y,mask){
  480.     mouse_l_hold_f = on_form = (y < heigh_row);
  481.     mouse_l_hold = !mouse_l_hold_f;
  482.  
  483.     var tam = Math.round((y + scroll - heigh_row * 0.5)/heigh_row);
  484.     if(tam < playlist_dr.length && tam >= 0){
  485.         var playlist_tmp = playlist_dr[tam];
  486.         if(heigh_row * (playlist_tmp.lv + 1)> x && heigh_row * playlist_tmp.lv < x){
  487.             //TREE EXPANT OR COLAPSE
  488.             if(playlist_tmp.child.length > 0){
  489.                 tree_minimum(playlist_tmp);
  490.             }else{
  491.                 exppant_ = playlist_tmp;
  492.                 auto_colapse && tree_collasp(playlist_tmp);
  493.                 tree_expant(playlist_tmp); //tree_expant(playlist_dr[tam])
  494.             }
  495.         }else if(check_item(playlist_tmp,x,y)){
  496.             //ITEM CHOOSE
  497.             mm_x = x;mm_y = y;
  498.             mouse_drag = true;
  499.             if(!playlist_tmp.choose){
  500.                 on_chose(tam,playlist_tmp.choose);
  501.                 selected_cusor = tam;
  502.                 mouse_hold = true;
  503.             }
  504.             else if(utils.IsKeyPressed(0x11)){
  505.                 on_chose(tam,playlist_tmp.choose);
  506.             }
  507.         }else
  508.             on_chose(-1);
  509.         repaint_main1 = repaint_main2;
  510.         repaint_f1 = repaint_f2;
  511.     }else
  512.         on_chose(-1);
  513.  
  514.     if(playlist_dr.length * heigh_row > wh && x > ww - 8){
  515.         hold_scroll = true;
  516.         scroll = Math.round((((y - heigh_row) * (playlist_dr.length * heigh_row ) / (wh - heigh_row)) - (wh - heigh_row)/2)/heigh_row-0.5)*heigh_row;
  517.     }
  518. }
  519.  
  520. function on_chose(index,mouse_up){
  521.     repaint_main1 = repaint_main2;
  522.     if(index == -1){
  523.         for(var k = 0;k < playlist_dr.length;k++)
  524.             playlist_dr[k].choose = false;
  525.     }else if((utils.IsKeyPressed(0x10) || mouse_hold) && last_choose > -1){
  526.         choose_playlist = plman.GetPlaylistItems(-1);
  527.         var dd = (index > last_choose)?1:-1;
  528.         if(!utils.IsKeyPressed(0x11)){
  529.             for(var k = 0;k < playlist_dr.length;k++)
  530.                 playlist_dr[k].choose = false;
  531.         }
  532.         for(var k = last_choose; ;k += dd){
  533.             playlist_dr[k].choose = true;
  534.             choose_playlist.AddRange(playlist_dr[k].pl);
  535.             if(k==index)
  536.                 break;
  537.         }
  538.         repaint_main1 = repaint_main2;
  539.     }else if(utils.IsKeyPressed(0x11)){
  540.         playlist_dr[index].choose = !(playlist_dr[index].choose);
  541.         playlist_dr[index].choose && choose_playlist.AddRange(playlist_dr[index].pl);
  542.         last_choose = index;
  543.     }else if(!mouse_up){
  544.         choose_playlist = plman.GetPlaylistItems(-1);
  545.         for(var k = 0;k < playlist_dr.length;k++)
  546.             playlist_dr[k].choose = false;
  547.         playlist_dr[index].choose = true;
  548.         choose_playlist.AddRange(playlist_dr[index].pl);
  549.         last_choose = index;
  550.     }
  551. }
  552.  
  553. function check_playlist(name){
  554.     var pl_name = "", pl_idx = -1;
  555.     for(var i=0; i < plman.PlaylistCount; i++) {
  556.         pl_name = plman.GetPlaylistName(i);
  557.         if(pl_name == name) {
  558.             pl_idx = i;
  559.             break;
  560.         }
  561.     }
  562.     return pl_idx;
  563. }
  564.  
  565.  
  566. function on_char(code){
  567.     time333 = (new Date()).getTime();
  568.     var input = String.fromCharCode(code);
  569.     if(on_form){
  570.         form_text_cusor_hiden = true;
  571.         selected_cusor = -1;
  572.         switch(code){
  573.             case 13://ENTER
  574.                 if(form_text.length < 3)
  575.                     break;
  576.                 str = prcess_string(form_text);
  577.                 var total = list.Count;
  578.                 var pltemp = plman.GetPlaylistItems(-1);
  579.                 for(var i = 0;i < total;i++)
  580.                     if(match(index_search_[i],str))
  581.                         pltemp.Add(list.Item(i));
  582.                 apply_playlist(pltemp);
  583.                 pltemp.Dispose();        
  584.             break;
  585.             case 25:
  586.                 form_his.push(form_text);
  587.                 if(form_his.length > 30) form_his.shift();
  588.                 if(form_his_.length > 0) form_text = form_his_.pop() + "";
  589.                 break;
  590.             case 26:
  591.                 form_his_.push(form_text);
  592.                 if(form_his_.length > 30) form_his.shift();
  593.                 if(form_his.length > 0) form_text = form_his.pop() + "";
  594.             break;
  595.            
  596.             case 1://CTRL + A
  597.                 bold_start = 0;
  598.                 bold_end = form_text.length;
  599.             break;
  600.            
  601.             case 3: // COPPY
  602.                 (bold_start != bold_end) && htmlfile.parentWindow.clipboardData.setData('text',form_text.substring(bold_start,bold_end));
  603.             break;
  604.            
  605.             case 24://CUT
  606.                 (bold_start != bold_end) && htmlfile.parentWindow.clipboardData.setData('text',form_text.substring(bold_start,bold_end));
  607.             case 8://DELETE
  608.                 save_form_his();
  609.                 if(bold_start == bold_end){
  610.                     form_text = form_text.substring(0,form_text_cusor-1) + form_text.substring(form_text_cusor,200);
  611.                     if(form_text_cusor > 0)
  612.                         form_text_cusor--;
  613.                     bold_end = bold_start = form_text_cusor;
  614.                 }else{
  615.                     form_text = form_text.substring(0,bold_start) + form_text.substring(bold_end,200);
  616.                     form_text_cusor = bold_start;
  617.                     bold_end = bold_start;
  618.                 }
  619.             break;
  620.  
  621.             case 22://CTRL + V//PASTE
  622.                 input = htmlfile.parentWindow.clipboardData.getData('text');
  623.             default: //CHAR
  624.                 save_form_his();
  625.                 if(char_index[form_text.length] + heigh_row >= ww - 10)
  626.                     break;
  627.                 if(bold_start == bold_end){
  628.                     form_text = form_text.substring(0,form_text_cusor) + input + form_text.substring(form_text_cusor,200);
  629.                     form_text_cusor += input.length;
  630.                     bold_end = bold_start = form_text_cusor;
  631.                 }else{
  632.                     form_text = form_text.substring(0,bold_start) + input + form_text.substring(bold_end,200);
  633.                     form_text_cusor = bold_start + input.length;
  634.                     bold_end = bold_start;
  635.                 }
  636.             break;
  637.         }
  638.         repaint_f1 = repaint_f2;
  639.     }else{
  640.         //qsearch_t
  641.         var str,end_,lg,i,search_ = true;
  642.         qsearch_t.Reset();
  643.         switch(code){
  644.             case 13://ENTER
  645.                 qsearch = "";
  646.                 break;
  647.             case 8://DELETE
  648.                 qsearch = qsearch.substr(0,qsearch.length - 1);
  649.                 break;
  650.             case 60: case 44:
  651.                 qsearch_idx--;
  652.                 search_ = false;
  653.                 break;
  654.             case 62: case 46:
  655.                 qsearch_idx++;
  656.                 search_ = false;
  657.                 break;
  658.             case 39 : case 37 :
  659.                 search_ = false;
  660.                 break;
  661.             break;
  662.             default:
  663.                 qsearch += input;
  664.             break;
  665.         }
  666.         str = prcess_string(qsearch == ""?"@@@@":qsearch);
  667.         choose_playlist = plman.GetPlaylistItems(-1);
  668.         end_ = playlist_dr.length;
  669.         if(search_){
  670.             str = prcess_string(qsearch == ""?"@@@@":qsearch);
  671.             qsearch_lidx = [];
  672.             for(i = 0;i < end_;i++){//String.toLowerCase
  673.                 if(match(playlist_dr[i].name.toLowerCase(),str)){
  674.                     qsearch_lidx[qsearch_lidx.length] = i;
  675.                     playlist_dr[i].choose = true;
  676.                     choose_playlist.AddRange(playlist_dr[i].pl);
  677.                 }else
  678.                     playlist_dr[i].choose = false;
  679.             }
  680.         }else
  681.             for(i = 0;i < end_;i++) playlist_dr[i].choose = false;
  682.         lg = qsearch_lidx.length;
  683.         qsearch_idx += lg;
  684.         if(lg != 0){
  685.             selected_cusor = qsearch_lidx[qsearch_idx%lg];
  686.             scroll = (selected_cusor - 5) * heigh_row;
  687.             !search_ && on_chose(selected_cusor);
  688.         }
  689.        
  690.         repaint_main1 = repaint_main2;
  691.     }
  692. }
  693.  
  694.  
  695.  
  696. function save_form_his(){
  697.     if(time_h.Time < 100)
  698.         return;
  699.     form_his.push(form_text);
  700.     form_his_ = [];
  701.     if(form_his.length > 30) form_his.shift();
  702.     time_h.Reset();
  703. }
  704.  
  705. function on_key_down(vkey) {
  706.     switch(vkey){
  707.         case 0x25:case 0x27:
  708.             if(on_form){
  709.                 if(vkey == 0x25 && form_text_cusor > 0)
  710.                     form_text_cusor--;
  711.                 if(vkey == 0x27 && form_text_cusor < form_text.length)
  712.                     form_text_cusor++;            
  713.                 if(hold_shift){
  714.                     bold_start = Math.min(form_text_cusor,shift_index);
  715.                     bold_end   = Math.max(form_text_cusor,shift_index);
  716.                 }else
  717.                     bold_start = bold_end = form_text_cusor;
  718.             }else if(selected_cusor >= 0){
  719.                 on_form = false;
  720.                 if(vkey == 0x25){
  721.                     if(playlist_dr[selected_cusor].child.length > 0){
  722.                         var tmp = playlist_dr[selected_cusor];
  723.                         tree_minimum(tmp);
  724.                         on_chose(tmp.idx);
  725.                         selected_cusor = tmp.idx;                        
  726.                     }else try{
  727.                         var tmp = playlist_dr[playlist_dr[selected_cusor].pr];
  728.                         tree_minimum(tmp);
  729.                         on_chose(tmp.idx);
  730.                         selected_cusor = tmp.idx;
  731.                     }catch(err){ };
  732.                 }else{
  733.                     var tmp = playlist_dr[selected_cusor];
  734.                     auto_colapse && tree_collasp(tmp);
  735.                     tree_expant(tmp);
  736.                     on_chose(tmp.idx);
  737.                     selected_cusor = tmp.idx;
  738.                 }
  739.                 if((selected_cusor + 1 ) * heigh_row > (scroll + wh))
  740.                     scroll = (selected_cusor + 2) * heigh_row - Math.round(wh / heigh_row)* heigh_row;
  741.                 else if((selected_cusor - 1) * heigh_row - scroll < 0)    
  742.                     scroll = (selected_cusor - 1) * heigh_row;
  743.                 repaint_main1 = repaint_main2;
  744.             }
  745.         break;
  746.         case 0x10:
  747.             hold_shift = true;
  748.             shift_index = form_text_cusor;
  749.         break;
  750.         case 0x11:
  751.             hold_ctrl = true;
  752.         break;
  753.         case 13:
  754.             if(on_form)return;
  755.             if(choose_playlist.Count == 0) return;
  756.             apply_playlist(choose_playlist);
  757.         break;
  758.         case 40:case 38:
  759.             if(playlist_dr.length == 0)
  760.                 break;
  761.             if((selected_cusor == 0 && vkey == 38)||(selected_cusor == playlist_dr.length - 1 && vkey == 40)){
  762.                 repaint_main1 = repaint_main2;  
  763.                 form_text_cusor_hiden = !form_text_cusor_hiden;
  764.                 on_form = true;
  765.                 on_mouse_lbtn_down(ww - 21,10,0);
  766.                 on_chose(-1);
  767.                 break;
  768.             }
  769.             (vkey == 40) && selected_cusor++;
  770.             (vkey == 38) && selected_cusor--;
  771.            
  772.             selected_cusor = (selected_cusor + playlist_dr.length)% playlist_dr.length;
  773.  
  774.             if((selected_cusor + 2) * heigh_row - (scroll + wh - heigh_row) > 0)
  775.                 scroll = (selected_cusor + 3) * heigh_row - Math.round(wh / heigh_row - 1)* heigh_row;
  776.             else if((selected_cusor - 1) * heigh_row - scroll < 0)    
  777.                 scroll = (selected_cusor - 1) * heigh_row;
  778.            
  779.             on_chose(selected_cusor);
  780.            
  781.             on_form = false;
  782.             repaint_main1 = repaint_main2;
  783.         break;
  784.         case 46:
  785.             on_key_down(39);
  786.             on_char(8);
  787.         break;
  788.     }
  789.     repaint_f1 = repaint_f2;
  790.     form_text_cusor_hiden = true;
  791. }
  792.  
  793. function on_key_up(vkey){
  794.     switch(vkey){
  795.         case 0x10:
  796.             hold_shift = false;
  797.             shift_index = form_text_cusor;
  798.         break;
  799.         case 0x11:
  800.             hold_ctrl = false;
  801.         break;
  802.     }
  803. }
  804.  
  805. function on_mouse_move(x,y){
  806.     if(m_x == x && m_y == y)
  807.         return;
  808.     mouse_in = true;
  809.     if(y < heigh_row && x < ww - heigh_row)
  810.         window.SetCursor(32513);
  811.     else
  812.         window.SetCursor(32512);
  813.     if(y < heigh_row && mouse_l_hold_f){
  814.         bold_start = form_text_cusor;
  815.         bold_end = get_cusor_index(x);
  816.         if(bold_start > bold_end){
  817.             var tam = bold_start;
  818.             bold_start = bold_end;
  819.             bold_end = tam;
  820.         }
  821.         repaint_f1 = repaint_f2;
  822.     }
  823.     if(m_x > ww-heigh_row && m_y < heigh_row)
  824.         repaint_f1 = repaint_f2;
  825.     m_x = x;m_y = y;
  826.     var tam = Math.round((y - heigh_row*0.5)/heigh_row);
  827.     if(tam < playlist_dr.length && tam >= 0){
  828.         repaint_main1 = repaint_main2;
  829.     }
  830.     if(hold_scroll){
  831.         scroll = Math.round((((y - heigh_row) * (playlist_dr.length * heigh_row ) / (wh - heigh_row)) - (wh - heigh_row)/2)/heigh_row-0.5)*heigh_row;
  832.     }
  833.     time_tooltip.Reset();
  834. }
  835.  
  836. function on_mouse_leave(){
  837.     m_x = x_y = 0;
  838.     mouse_drag = mouse_hold = mouse_in = false;
  839. }
  840.  
  841. function apply_playlist(playlist){
  842.     var pl_idx = check_playlist("Wsh search");
  843.     if(pl_idx == -1){
  844.         pl_idx = fb.PlaylistCount;
  845.         fb.CreatePlaylist(pl_idx,"Wsh search");
  846.     }else{
  847.         fb.ActivePlaylist = pl_idx;
  848.         fb.RunMainMenuCommand("Edit/Clear");
  849.     }
  850.     fb.ActivePlaylist = pl_idx;
  851.     var playlist_ = playlist.Clone();
  852.     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);
  853.     plman.InsertPlaylistItems(pl_idx,1,playlist_);
  854.     fb.ActivePlaylist = pl_idx;
  855.     plman.ExecutePlaylistDefaultAction(pl_idx,0);
  856.     fb.RunMainMenuCommand("Edit/Remove Duplicates");
  857. }
  858.  
  859. function add_playlist(playlist){
  860.     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);
  861.     plman.InsertPlaylistItems(fb.ActivePlaylist,plman.PlaylistItemCount(fb.ActivePlaylist),playlist);
  862.     fb.RunMainMenuCommand("Edit/Remove Duplicates");
  863. }
  864.  
  865. function on_mouse_mbtn_down(x,y,mask){
  866.     var tam = Math.round((y + scroll - heigh_row*0.5)/heigh_row);
  867.     if(tam < playlist_dr.length && tam >= 0)
  868.         check_item(playlist_dr[tam],x,y) && add_playlist(playlist_dr[tam].pl);
  869. }
  870.  
  871. function on_paint(gr){
  872.     !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, 0xff000000);
  873.  
  874.     repaint_main = false;
  875.     var index = 0,j = 0,start_ = 0,end_ = 0,alpha = 0;
  876.     var count_,head_,name_,width_,left_mg;
  877.     var width_aaa = gr.CalcTextWidth("(+) ",g_font);
  878.     start_ = Math.round(scroll_/heigh_row - 0.5);
  879.     end_ = Math.round((scroll_ + wh)/heigh_row - 0.5);
  880.     end_ = (playlist_dr.length < end_)?playlist_dr.length:end_;
  881.     for(var i = start_;i < end_;i++){
  882.         alpha = (playlist_dr[i].alpha<<24)|0xffffff;
  883.         count_ = (playlist_dr[i].pl.Count >1)?(" (" +playlist_dr[i].pl.Count + ")"):("");
  884.         head_ = playlist_dr[i].leaf?"✚ ":((playlist_dr[i].child.length < 1)?"[+] ":"[--] ");
  885.         name_= head_ + playlist_dr[i].name + count_ + "";
  886.         width_ = gr.CalcTextWidth(name_,g_font) - (playlist_dr[i].leaf?0:width_aaa) + heigh_row * 0.2;
  887.         playlist_dr[i].rg = width_  - (playlist_dr[i].leaf?heigh_row:0);
  888.         playlist_dr[i].choose  ?(playlist_dr[i].alpha += time_dl * 2)
  889.                                 :((mouse_index != i) && (playlist_dr[i].alpha -= time_dl * 0.7));
  890.         playlist_dr[i].alpha = Math.max(0,Math.min(255,playlist_dr[i].alpha));
  891.         (playlist_dr[i].alpha % 255 !=0) && (repaint_main1 = repaint_main2);
  892.         (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));
  893.         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);
  894.         left_mg = heigh_row * (playlist_dr[i].lv + 0.1);
  895.         gr.GdiDrawText(name_, g_font, color_text,left_mg,heigh_row * (i + 0.1)- scroll_, ww - left_mg, heigh_row, 0);  
  896.     }
  897.    
  898.     // Draw Qsearch
  899.     gr.SetSmoothingMode(4);
  900.     if(qsearch_t.Time < 500 && qsearch != ""){
  901.         var wid = gr.CalcTextWidth(qsearch,g_font_q) + 25;
  902.         var hei = heigh_row * 1.5;
  903.         gr.DrawRoundRect(ww/2 - wid/2, wh/2 - hei/2, wid, hei, 5, 5, heigh_row * 0.1, 0xaaffffff);
  904.         gr.FillRoundRect(ww/2 - wid/2, wh/2 - hei/2, wid, hei, 5, 5, 0x77000000);
  905.         gr.GdiDrawText(qsearch, g_font_q, 0xff000000,ww/2 - wid/2 + 2, wh/2 - hei/2 + heigh_row * 0.2 + 2, wid, hei, 0x05);  
  906.         gr.GdiDrawText(qsearch, g_font_q, color_text,ww/2 - wid/2, wh/2 - hei/2 + heigh_row * 0.2, wid, hei, 0x05);  
  907.     }
  908.    
  909.    
  910.  
  911.     //Draw Scoll Bar
  912.     if(playlist_dr.length * heigh_row > wh - heigh_row){
  913.         var hei = playlist_dr.length * heigh_row;
  914.         //gr.FillGradRect(ww-7,heigh_row,7,wh-heigh_row,0,0x60000000,0x60000000);
  915.         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);
  916.     }
  917.     //Draw Blend
  918.     if(img_blend_2)
  919.         gr.GdiAlphaBlend(img_blend_2,0,wh * 39 / 40,ww,img_blend_2.Height,0,1,ww,img_blend_2.Height - 1,255);
  920.  
  921. }
  922.  
  923.  
  924.  
  925. function on_timer_(g_time333){
  926.     var repaint_1 = false,repaint_2 = false;
  927.     time_dl = time_s.Time;
  928.     time_s.Reset();
  929.     if(research){
  930.         research = false;
  931.         get_pl_tree(research_k,form_text);
  932.         return;
  933.     }        
  934.    
  935.     var d = new Date();
  936.     if(d.getTime() - time222 < 15)
  937.         return
  938.     else
  939.         time222 = d.getTime();
  940.  
  941.     if(d.getTime() - time333 > time_delay_search && on_form && form_text_b != form_text){
  942.         time333 = d.getTime();
  943.         form_text_b = form_text;
  944.         lib_search = form_text;
  945.         get_pl_tree();
  946.     }
  947.    
  948.     mouse_index = -1;
  949.     var tam = check_item_index(m_x,m_y);
  950.    
  951.     if(tam != -1){
  952.         if(qsearch == "")
  953.             playlist_dr[tam].alpha = Math.min(playlist_dr[tam].alpha + 40,255);
  954.         if(m_tam != tam){
  955.             mouse_hold && on_chose(tam);
  956.             deactive_tooltip();
  957.         }else{
  958.             Tooltip && (time_tooltip_ += time_dl);
  959.         }
  960.         if(Tooltip && time_tooltip_ > 3000  && !tooltip_state && (heigh_row * (playlist_dr[tam].lv + 1) + playlist_dr[tam].rg) > ww && playlist_dr[tam].alpha > 250){
  961.             g_tooltip.Width = playlist_dr[tam].rg;
  962.             g_tooltip.Height = heigh_row;
  963.             active_tooltip();
  964.             g_tooltip.TrackPosition(heigh_row * (playlist_dr[tam].lv + 1), Math.floor((m_y+1) / heigh_row) * heigh_row - 1);
  965.             g_tooltip.Text = " ";
  966.         }else
  967.             deactive_tooltip();
  968.         mouse_index = tam;
  969.         m_tam = tam;
  970.     }
  971.    
  972.     if(qsearch_t.Time > 1500 && qsearch != ""){
  973.         repaint_2 = true;
  974.         qsearch = "";
  975.     }
  976.     if(time_tooltip.Time > 7000){
  977.         deactive_tooltip();
  978.     }
  979.  
  980.    
  981.     if(d.getTime() - time111 > 600 && on_form){
  982.         form_text_cusor_hiden = !form_text_cusor_hiden;
  983.         time111 = d.getTime();
  984.         repaint_1 = true;
  985.     }
  986.  
  987.     if(repaint_f1 == repaint_f2){
  988.         repaint_f2 = !repaint_f1;
  989.         repaint_1 = true;
  990.     }
  991.    
  992.     if(repaint_main1 == repaint_main2){
  993.         repaint_main2 = !repaint_main1;
  994.         repaint_2 = true;
  995.     }
  996.    
  997.     scroll = check_scroll(scroll);
  998.    
  999.     if(Math.abs(scroll - scroll_) > 0.5){
  1000.         scroll___ += (scroll - scroll___) * (1-Math.pow(0.9,time_dl/4));
  1001.         scroll__ += (scroll___ - scroll__) * (1-Math.pow(0.9,time_dl/4));
  1002.         scroll_ += (scroll__ - scroll_) * (1-Math.pow(0.9,time_dl/4));
  1003.         time_tooltip.Reset();
  1004.         repaint_2 = true;
  1005.     }
  1006.     if(repaint_1 || repaint_2){
  1007.         time_s.Reset();
  1008.         repaint_main = true;
  1009.         repaint_f = true;
  1010.         window.Repaint();
  1011.     }
  1012. }
  1013.  
  1014. function check_item_index(x,y){
  1015.     var tam = Math.round((y + scroll_ - heigh_row*0.5)/heigh_row);
  1016.     if(playlist_dr.length > tam && tam >= 0 && x < ww -10 && y > heigh_row && check_item(playlist_dr[tam],x,y))
  1017.         return tam;
  1018.     else return -1;
  1019. }
  1020.  
  1021. var notifi = true;
  1022. function setfont(){
  1023.     if(!utils.CheckFont(Font_name)){
  1024.         notifi && fb.ShowPopupMessage("Stub image not found.\r\nGo to Properties to config Stub image path.");
  1025.         notifi = false;
  1026.     }
  1027.     g_font  = gdi.Font(Font_name, font_size, 0);
  1028.     g_font2 = gdi.Font(Font_name, font_size, 1);
  1029.     g_font3 = gdi.Font(Font_name, font_size, 2);
  1030.     g_font_q = gdi.Font(Font_name, font_size*1.5, 2);//    g_font_q = gdi.Font("Tahoma", font_size + 10, 2),
  1031.     g_font_marker = gdi.Font(Font_name, font_size, 1);
  1032. }
  1033.  
  1034. function on_mouse_wheel(step){
  1035.     if(utils.IsKeyPressed(0x11)){
  1036.         font_size += step;
  1037.         if(font_size > 30)
  1038.             font_size = 30;
  1039.         else if(font_size < 10)
  1040.             font_size = 10;
  1041.         window.SetProperty("font_size",font_size);
  1042.         setfont();
  1043.         scroll = scroll_ = scroll__ = scroll___ = scroll/heigh_row;
  1044.         heigh_row = Math.floor(font_size*16/11);
  1045.         scroll = scroll_ = scroll__ = scroll___ = scroll * heigh_row;
  1046.         window.SetProperty("heigh_row",heigh_row);
  1047.         repaint_f1 = repaint_f2;repaint_main1 = repaint_main2;
  1048.         return;
  1049.     }
  1050.     repaint_main1 = repaint_main2;
  1051.     scroll -= step*heigh_row*2;
  1052.     scroll = check_scroll(scroll);
  1053. }
  1054.  
  1055. function check_scroll(scroll___){
  1056.     scroll___ = Math.round(scroll___ / heigh_row ) * heigh_row;
  1057.     if(scroll___ > ((playlist_dr.length + 2 )* heigh_row - wh ))
  1058.         scroll___ = Math.round(((playlist_dr.length + 2 )* heigh_row - wh )/heigh_row - 0.5)*heigh_row;
  1059.     if(playlist_dr.length*heigh_row < wh - heigh_row)
  1060.         scroll___ = 0;
  1061.     if(scroll___ < 0)
  1062.         scroll___ = 0;
  1063.     return scroll___;
  1064. }
  1065.  
  1066. function on_mouse_rbtn_up(x, y){
  1067.     var MF_SEPARATOR = 0x00000800;
  1068.     var MF_STRING = 0x00000000;
  1069.     var _menu = window.CreatePopupMenu();
  1070.     var _menu1 = window.CreatePopupMenu();
  1071.     var Context = fb.CreateContextMenuManager();
  1072.     var con_ = false,time_111,idx;
  1073.     _menu1.AppendMenuItem(MF_STRING, 2, "Grouph by Path");
  1074.     _menu1.AppendMenuItem(MF_STRING, 3, "Grouph by Artist - Album");
  1075.     _menu1.AppendMenuItem(MF_STRING, 4, "Grouph by Album");
  1076.     _menu1.AppendMenuItem(MF_STRING, 5, "Grouph by User");
  1077.     _menu1.AppendMenuSeparator();
  1078.     _menu1.AppendMenuItem(MF_STRING, 11, "Auto Exppant");
  1079.     _menu1.AppendMenuItem(MF_STRING, 12, "Auto Collapse");
  1080.     _menu1.AppendMenuItem(MF_STRING, 15, "Tooltip");
  1081.     _menu1.AppendMenuSeparator();
  1082.     _menu1.AppendMenuItem(MF_STRING, 9, "Reefresh Library");
  1083.     _menu1.AppendMenuItem(MF_STRING, 13, "Configure Library Path");
  1084.     show_scripts && _menu1.AppendMenuItem(MF_STRING, 1, "Show Configure Scripts");
  1085.     _menu1.AppendMenuItem(MF_STRING, 100, "Show Properties");
  1086.     _menu1.CheckMenuRadioItem(2, 5,grouph_by + 2);
  1087.     _menu1.CheckMenuItem(11,auto_exppant);
  1088.     _menu1.CheckMenuItem(12,auto_colapse);
  1089.     _menu1.CheckMenuItem(15,Tooltip);
  1090.    
  1091.     var tam = Math.round((y + scroll_ - heigh_row*1.5)/heigh_row);
  1092.     if(y > heigh_row && playlist_dr.length > tam && tam >= 0 && x < ww - heigh_row/2 && check_item(playlist_dr[tam],x,y)){
  1093.         !playlist_dr[tam].choose && on_chose(tam);
  1094.         _menu.AppendMenuItem(MF_STRING, 21, "Send to Playing Playlist");
  1095.         _menu.AppendMenuItem(MF_STRING, 22, "Add to Playing Playlist");
  1096.         con_ = true;
  1097.     } else
  1098.          on_chose(-1);
  1099.     _menu1.AppendTo(_menu,MF_STRING, "Preferences");
  1100.     if(con_){
  1101.         _menu.AppendMenuSeparator();
  1102.         Context.InitContext(choose_playlist);
  1103.         Context.BuildMenu(_menu, 30, -1);
  1104.     }
  1105.     idx = _menu.TrackPopupMenu(x,y);
  1106.  
  1107.     switch(idx) {
  1108.         case 1:
  1109.             window.ShowConfigure();
  1110.         break;
  1111.         case 2:case 3:case 4:case 5:
  1112.             grouph_by = idx-2;
  1113.             window.SetProperty("Grouph by",grouph_by);
  1114.             get_library(2);
  1115.             get_pl_tree();
  1116.             repaint_f1 = repaint_f2;
  1117.             repaint_main1 = repaint_main2;
  1118.         break;
  1119.         case 9:
  1120.             get_library(1);
  1121.             get_pl_tree();            
  1122.             repaint_f1 = repaint_f2;
  1123.             repaint_main1 = repaint_main2;
  1124.         break;
  1125.         case 11:
  1126.             auto_exppant = !auto_exppant;
  1127.             window.SetProperty("auto exppant",auto_exppant);
  1128.             get_pl_tree();
  1129.             repaint_f1 = repaint_f2;
  1130.             repaint_main1 = repaint_main2;
  1131.         break;
  1132.         case 12:
  1133.             auto_colapse = !auto_colapse;
  1134.             window.SetProperty("auto colapse",auto_colapse);
  1135.             get_pl_tree();
  1136.             repaint_f1 = repaint_f2;
  1137.             repaint_main1 = repaint_main2;
  1138.         break;
  1139.         case 13:
  1140.             var lib_filter = vbe.eval("InputBox(\"Example : \" + chr(10) + \"D:\\music\\;D:\\lossless\\\" + chr(10) + \"NULL to reset default\",\"Edit library Path\",\"" + library_path + "\")");
  1141.             if(lib_filter == "NULL" || lib_filter == "null")
  1142.                 library_path = "E:\\music\\lossless\\;E:\\music\\lossly\\320kps\\";
  1143.             else if(lib_filter)
  1144.                 library_path = lib_filter;
  1145.             library_path_ = library_path.split(";");
  1146.             window.SetProperty("Library path",library_path);
  1147.             get_library(1);
  1148.             get_pl_tree();            
  1149.             repaint_f1 = repaint_f2;
  1150.             repaint_main1 = repaint_main2;
  1151.         break;
  1152.         case 15:
  1153.             Tooltip = !Tooltip;
  1154.             window.SetProperty("Tooltip",Tooltip);
  1155.         break;
  1156.         case 21:
  1157.             apply_playlist(choose_playlist);
  1158.         break;
  1159.         case 22:
  1160.             add_playlist(choose_playlist);
  1161.         break;
  1162.         case 100:
  1163.             window.ShowProperties();
  1164.         break;
  1165.         default:
  1166.             con_ && Context.ExecuteByID(idx-30);
  1167.         break;
  1168.     }
  1169.     _menu.Dispose();
  1170.     _menu1.Dispose();
  1171.     Context.Dispose();
  1172.     return true;
  1173. }
  1174.  
  1175. function active_tooltip(){
  1176.     if(!tooltip_state){
  1177.         tooltip_state = true;
  1178.         g_tooltip.Activate();
  1179.         g_tooltip.TrackActivate = true;
  1180.     }
  1181. }
  1182.  
  1183. function deactive_tooltip(){
  1184.  
  1185.     if(tooltip_state){
  1186.         tooltip_state = false;
  1187.         g_tooltip.TrackActivate = false;
  1188.         g_tooltip.Deactivate();
  1189.         time_tooltip_ = 0;
  1190.         time_tooltip.Reset();
  1191.     }
  1192. }
  1193.  
  1194. function on_tooltip_custom_paint(gr){
  1195.     var tam = check_item_index(m_x,m_y);
  1196.     var dr_str = playlist_dr[tam].name + (playlist_dr[tam].leaf?(""):(" (" + playlist_dr[tam].pl.Count + ")"));
  1197.     gr.GdiDrawText(dr_str, g_font, 0xaa333333,font_size * 0.2,heigh_row * 0.1,playlist_dr[tam].rg, heigh_row, 0x804);  
  1198. }
  1199.  
  1200.  
  1201. function create_blend(){
  1202.     ww = window.Width;
  1203.     wh = window.Height;
  1204.     try{
  1205.         background = window.GetBackgroundImage();
  1206.         x = Math.ceil(wh/40 * 39) - 1;
  1207.         w = background.Height - x;
  1208.         img1 = background.Clone(0,x ,ww,w);
  1209.         var tmp = gdi.CreateImage(ww,w);
  1210.         var gr = tmp.GetGraphics();
  1211.         gr.FillGradRect(0,0,ww,wh/40,270,0xff000000,0xffffffff,1);
  1212.         gr.FillGradRect(0,wh/80,ww,wh/80,270,0xaa000000,0x00ffffff,1);
  1213.         tmp.ReleaseGraphics(gr);
  1214.         img1.ApplyMask(tmp);
  1215.         img_blend_2 = img1.CreateRawBitmap();      
  1216.     }catch(err){}
  1217. }
  1218.  
  1219.  
  1220.  
  1221. window.SetTimeout(function(){
  1222.     get_library();
  1223.    
  1224.     if(form_text == ""){
  1225.         get_pl_tree();
  1226.         repaint_f1 = repaint_f2;
  1227.         repaint_main1 = repaint_main2;        
  1228.     }
  1229.    
  1230. },1000);
  1231.  
  1232. window.SetInterval(function(){
  1233.     on_timer_(0);
  1234. },16);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement