seriousstas |
23.06.2016 18:55 |
Цитата:
Сообщение от kaamoss
(Сообщение 363296)
|
Там совсем другие компоненты ..
С этим - тоже всё нормально :
Код:
// ==PREPROCESSOR==
// @name "TOUCH LIBRARY PANEL TREE mod_5"
// @version "1.0"
// @author "Vo Thanh Dat moded by Terro"
// @feature "watch-metadb"
// @tooltip "custom-paint"
// ==/PREPROCESSOR==
//
//=========================for full functionality use WSH Panel MOD 1.5.10
//======================================================================= Color change from line 104 - 107
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }
function test_perfomance(){
}
var slide_r = window.GetProperty("Slide_right",50)
var lbdn = 0;
var y_start = 0;
var y_end = 0;
var y_delta = 0;
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;
//=====================added
var g_time000 = window.SetInterval(on_timer, 16);
//=====================
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",true),
auto_exppant = window.GetProperty("auto exppant",true),
show_scripts = window.GetProperty("show_scripts",true),
grouph_option = window.GetProperty("grouph_option",""),
search_async = window.GetProperty("search_async",true),
font_size = window.GetProperty("font_size",20),
library_path = window.GetProperty("Library path",""),
istranparent = window.GetProperty("tranparent",true),
heigh_row = window.GetProperty("heigh_row",30),
Tooltip = window.GetProperty("Tooltip",false),
Font_name = window.GetProperty("Font_name","Segoe UI"),
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;
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 = RGB(153,141,249);//0xff998DF9; //================ Text Color
var background_color = 0xff000000;//================= Background Color
var choose_background_color = RGB(203,50,50)//0xFF8B0000;//============== Select Color
var alfa_fade_color = RGBA(40,30,20,150);//====================== Alfa fade Background (if dont need comment line 913)
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 = "Media Library";
setfont();
var exppant_,
research = false,
search_done = false,
research_k = 0;
vbe.Language = 'VBScript';
window.DlgCode = 0x0081 ;
var lib_search = "";
function indexer(){
var total = list.Count;
index_search = [];
index_path = [];
index_path_ = [];
var TitleFormat = "[$if(%title%,$replace(%title%,'&','and'),'N/A')] ^^ %album artist% ^^ %album% ^^ %genre% ^^ $if(%path%,$replace(%path%,'&','and'),'N/A') ^^ %composer% ^^ %performer% ^^ %comment%";
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){fb
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 == "Media Library") {
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,"Media Library","ALL","");
list = plman.GetPlaylistItems(pl_idx);
(grouph_by == 0) && list.OrderByFormat(fb.TitleFormat("%path%"), 1);
(grouph_by > 0) && list.OrderByFormat(fb.TitleFormat((grouph_by == 3)?grouph_option:art_alb_sort), 1);
plman.InsertPlaylistItems(pl_idx,0,list);
}else if(reload){
fb.RemovePlaylist(pl_idx);
fb.CreateAutoPlaylist(pl_idx,"Media Library","ALL","");
list = plman.GetPlaylistItems(pl_idx);
(grouph_by == 0) && list.OrderByFormat(fb.TitleFormat("%path%"), 1);
(grouph_by > 0) && list.OrderByFormat(fb.TitleFormat((grouph_by == 3)?grouph_option:art_alb_sort), 1);
plman.InsertPlaylistItems(pl_idx,0,list);
}else
list = plman.GetPlaylistItems(pl_idx);
(grouph_by == 0) && list.OrderByFormat(fb.TitleFormat("%path%"), 1);
(grouph_by > 0) && list.OrderByFormat(fb.TitleFormat((grouph_by == 3)?grouph_option:art_alb_sort), 1);
test_perfomance();
Time_library.Print();
Time_library = fb.CreateProfiler("Time Out Indexer library");
indexer();
Time_library.Print();
}
get_library();
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;
return;
}
}
repaint_main1 = repaint_main2;
//fb.trace("Timeout break : " + Time.Time);
fb.trace("Searching Done : " + timeaaaa.Time/1000);
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). ] $if(%title%,$replace(%title%,'&','and'),'N/A') [- $if(%artist%,$replace(%artist%,'&','and'),'N/A')])");
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]) //=====================change
scroll = (idx- Math.round(m_y/heigh_row-1.5))*heigh_row;//=====================change
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){
lbdn = 0;
y_start = y;
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 * 1.5)/heigh_row);
if(y > heigh_row && 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*1.5)/heigh_row);
if(y > heigh_row && 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 - slide_r > (heigh_row * (obj.lv + 1)) && x - slide_r < (heigh_row * (obj.lv + 1) + obj.rg));
}
//======================================================
function on_mouse_lbtn_down(x,y,mask){
lbdn = 1;
y_start = y;
g_drag = false;
mouse_l_hold_f = on_form = (y < heigh_row);
mouse_l_hold = !mouse_l_hold_f;
if(y < heigh_row){
if(x < ww - heigh_row){
form_text_cusor = get_cusor_index(x);
repaint_f1 = repaint_f2;
form_text_cusor_hiden = true;
time111 = (new Date()).getTime();
if(mask == 1.5){
bold_start = (" " + form_text + " ").lastIndexOf(" ",form_text_cusor);
bold_end = (" " + form_text + " ").indexOf(" ",form_text_cusor+1)-1;
}else
bold_start = bold_end = form_text_cusor;
}else if(x > ww - heigh_row){
bold_start = bold_end = form_text_cusor = 0;
form_text = "";
time333 = (new Date()).getTime() + 800;
}
return;
}
if(y > heigh_row ){
var tam = Math.round((y + scroll - heigh_row * 1.5)/heigh_row);
if(tam < playlist_dr.length && tam >= 0){
var playlist_tmp = playlist_dr[tam];
if(heigh_row * (playlist_tmp.lv + 1)> x - slide_r && heigh_row * playlist_tmp.lv < x - slide_r){
//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);
add_playlist(choose_playlist);//================================== Add to playlist(Shift + Enter)
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;
}
}
//======================================================Touch mod
function on_mouse_move(x,y){
if (lbdn) {
y_end = y;
y_delta = (y_end - y_start);
if (x < ww){
if (y_delta > wh/25) {
on_mouse_wheel(1);
repaint_f1 = repaint_f2;
y_start = y_end;
}
if (y_delta < -wh/25) {
on_mouse_wheel(-1);
repaint_f1 = repaint_f2;
y_start = y_end;
};
}
scroll = check_scroll(scroll);
}
if(m_x == x && m_y == y)
return;
mouse_in = true;
if(y < heigh_row && x < ww - heigh_row)
window.SetCursor(32512);
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*1.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;
}
//====================================================================APPLY & ADD TO PL
function apply_playlist(playlist){
var pl_idx = check_playlist("Library view");
if(pl_idx == -1){
pl_idx = fb.PlaylistCount;
fb.CreatePlaylist(pl_idx,"Library view");
}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);
playlist_.OrderByFormat(fb.TitleFormat("%path%"),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);
playlist.OrderByFormat(fb.TitleFormat("%path%"),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*1.5)/heigh_row);
if(y > heigh_row && tam < playlist_dr.length && tam >= 0)
check_item(playlist_dr[tam],x,y) && add_playlist(playlist_dr[tam].pl);
}
//======================================================= On Paint
function on_paint(gr){
!window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, 0xff000000);
gr.FillSolidRect(0, 0, ww, wh, alfa_fade_color);//-----> Alfa Fade (if dont need comment//)
if(!repaint_main && !repaint_f)
repaint_main = repaint_f = true;
if(repaint_main){
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.4);
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) + slide_r,Math.floor((i + 1)* 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) + slide_r,Math.floor((i + 1)* heigh_row - scroll_ + 1),width_, Math.floor(heigh_row*0.95 - 1),1,0x30FFFFFF);
left_mg = heigh_row * (playlist_dr[i].lv + 0.1);
gr.GdiDrawText(name_, g_font, color_text,left_mg + slide_r,heigh_row * (i + 1.1)- scroll_-5, 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);
}
if(repaint_f){
repaint_f = false;
//!window.IsTransparent && gr.FillSolidRect(0, 0, ww, heigh_row, 0x80555555);
//!window.IsTransparent && gr.DrawRect(0, 0, ww, heigh_row, 1,0x70ffffff);
//refresh_char_index(gr);
//bold_start = Math.max(bold_start,0);
//bold_end = Math.max(bold_end,0);
//form_text_cusor = Math.max(form_text_cusor,0);
//bold_start = Math.min(bold_start,form_text.length);
//bold_end = Math.min(bold_end,form_text.length);
//form_text_cusor = Math.min(form_text_cusor,form_text.length);
//gr.DrawLine(0,heigh_row/2,ww,heigh_row/2,heigh_row,on_form?0x60222222:0x60000000);
//on_form && form_text_cusor_hiden && (bold_start == bold_end) && gr.DrawLine(char_index[form_text_cusor] + heigh_row/10,heigh_row/10,char_index[form_text_cusor] + heigh_row/10,heigh_row*0.9,1,color_text);
//bold_end = (bold_end < form_text.length)?bold_end:form_text.length;
//(bold_start != bold_end) && gr.DrawLine(char_index[bold_start] + heigh_row/10,heigh_row/2,char_index[bold_end] + heigh_row/10,heigh_row/2,heigh_row-3,choose_background_color);
//gr.GdiDrawText(form_text, g_font, color_text, heigh_row/10, heigh_row/10-5, ww, heigh_row, 0);
//(form_text == "") && gr.GdiDrawText("Search . . .", g_font3, RGB(105,105,105), heigh_row/10, heigh_row/10-5, ww, heigh_row, 0);
//gr.DrawLine(ww-heigh_row*0.8,heigh_row*0.8,ww - heigh_row*0.2,heigh_row*0.2,heigh_row/10,(m_x > ww-heigh_row && m_y < heigh_row)?0xf0ffffff:RGB(105,105,105));
//gr.DrawLine(ww-heigh_row*0.8,heigh_row*0.2,ww - heigh_row*0.2,heigh_row*0.8,heigh_row/10,(m_x > ww-heigh_row && m_y < heigh_row)?0xf0ffffff:RGB(105,105,105));
}
}
//===============================================================ON TIMER
function on_timer(g_time333){
if(!window.IsVisible)
return;
on_timer_(g_time333);
}
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();
}else if(repaint_1){
repaint_f = true;
window.RepaintRect(0,0,ww,heigh_row,true);
}else if(repaint_2){
repaint_main = true;
time_s.Reset();
window.RepaintRect(0,heigh_row,ww,wh-heigh_row,true);
}
}
function check_item_index(x,y){
var tam = Math.round((y + scroll_ - heigh_row*1.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);
}
//===================================================Wheel step
function on_mouse_wheel(step){
if(utils.IsKeyPressed(0x11)){
font_size += step;
if(font_size > 60)
font_size = 60;
else if(font_size < 20)
font_size = 20;
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*1;
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){}
}
var a000001 = window.SetTimeout(function(){
get_library();
if(form_text == ""){
get_pl_tree();
repaint_f1 = repaint_f2;
repaint_main1 = repaint_main2;
}
window.ClearTimeout(a000001);
},500);
function on_library_items_added(){
get_library(1);
get_pl_tree();
repaint_f1 = repaint_f2;
repaint_main1 = repaint_main2;
}
function on_library_items_removed(){
get_library(1);
get_pl_tree();
repaint_f1 = repaint_f2;
repaint_main1 = repaint_main2;
}
|