PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   АвтоЗвук (http://pccar.ru/forumdisplay.php?f=16)
-   -   сборка/тема foobar 2000 для CarPС (http://pccar.ru/showthread.php?t=19671)

seriousstas 23.06.2016 17:59

Цитата:

seriousstas знает про что я говорю...
Знаю , привет!
Кстати первая версия от Vo Thanh Dat :
// @version "1.0"
// @author "Vo Thanh Dat moded by Terro"
на WSH 1.5.10 правильно добавляет треки .
Можно пока её вернуть (как и 1.5.10) ... С ней проблем не-было ...

ещё можно просто доставить JP вместе с WSH 1.6

duzzy 23.06.2016 18:04

kaamoss

Цитата:

Раз уж грядёт модернизация сборки NEON
Она у меня давно уже переделана для работы JScript Panel :) просто я ее не выкладывал, потому как скрипты для WSH Panel Mod на ней работать не будут, и будет много вопросов... "почему это вот работает а это нет".
Цитата:

Можно ли сделать что бы подгружались фотки для каждого исполнителя?
Ты про инет-картинки говоришь, я правильно понял...

Цитата:

И ещё, есть ли возможность выкинуть функции DSP или их достаточно выключить что бы они не использовались?
Панель ДСП это просто переключалка пресетов которые сохранены в фубаре, обатной связи панель ДСП с фубаром не имеет... сделана просто для упрощения переключения пресетов ДСП. Если не нужна ее можно просто удалить или заменить другим скиптом.

duzzy 23.06.2016 18:11

seriousstas

Привет ! :)

Ну а вообще ты прав можно и ее вернуть... сейчас поищу у себя в закромах(уже столько на компе скриптов и их переделок просто жесть)

Я просто полностью перешел на JScript Panel и на библиотеку от WilB она мне больше нравится.

kaamoss 23.06.2016 18:12

Цитата:

Сообщение от duzzy (Сообщение 363283)
И появляются несколько вопросов тем кто будет переходить на JScrit Panel, так как по простому скрипты не переделать придется выбирать, использовать уже переделанный мной под палец скрипт от WilB...
либо мне придется перелопачивать под палец новый скрипт от Vo Thanh Dat что сейчас стоит в сборке(когда переделаю не знаю это очень муторный процесс а на улице лето и сидеть в духоте перелопачивать скрипт не очень хочется:)).

Так вот и вопрос, Использовать скрипт от WilB, либо ждать когда я перелопачу новый скрипт от Vo Thanh Dat, либо использовать как есть ???

Но оба новых скрипта работают на JScript Panel, соответственно придется немного дорабатывать сборки для их корректной работы, либо переделывать скрипты в сборке под JScript Panel.

Выглядят они так...
Скрипт от WilB переделка от меня под палец(я уже писал про него и какое то время уже обкатываю у себя в сборке)
http://jpegshare.net/thumbs/26/a0/26...18e0207e2d.jpg

Скрипт от Vo Thanh Dat не переделанный(пальцем в таком виде пользовать не реально)
http://jpegshare.net/thumbs/bd/e5/bd...fb8c72ff78.jpg

отличия и качество...

скрипт от WilB:
- работает как компонент библиотека Album List
- прямой доступ к индексу библиотеки(нет плейлистов и др мути, показывает содержимое как оно есть)
- куча настроек
- очень шустро работает
- бонусы от меня(обложка фоном, настройки прокрутки пальцем и т.д как обычно):smile2:
минусы --- нет инкрементного поиска, редактировать код очень сложновато писал грамотный кодер:big:, но основные вещи для использования под палец уже настроены и работают(добавление в плейлист по кнопке, проигрывание по даблу, много чего изменено по функционалу для работы пальцем)...
от себя могу добавить что мой выбор пал на него так как он почти одинаков по функциям с Album List плюс большой выбор настроек... мне он больше нравится в использовании

скрипт от Vo Thanh Dat :
- прямого доступа нет, работает через плейлист
- другие настройки вы уже видели и использовали
минусы --- нужно переделывать под палец, и опять же есть ошибки в коде(уже нашел пока быстро юзал), править его код очень геморойное занятие seriousstas знает про что я говорю...

Я ни хрена не понимаю в этих скриптах и в этих панелях))))
Для меня лично лишь бы всё правильно работало и трэки правильно распологались)))

пс Мой делитантский ответ:big:

kaamoss 23.06.2016 18:14

Цитата:

Сообщение от duzzy (Сообщение 363285)
kaamoss

Ты про инет-картинки говоришь, я правильно понял....

Да, именно про них

seriousstas 23.06.2016 18:24

kaamoss
duzzy

Предполагается, что в папке должны быть либо CUE c одним файлом либо потреково .
В KoЯn забыли удалить CUE - отсюда и проблемы ...
те нужно просто удалить CUE и проблема уйдёт ;)

duzzy 23.06.2016 18:25

seriousstas

Ты имел ввиду тот скрипт библиотеки где еще не было картинок(обложки фоном) ?

-----------------------

Ты гений спасибо тебе большое избавил от лишнего гемора :beer:...
(а я уже представил как сборку буду перелопачивать:smile1:)

Все правильно нужно куй удалить и все будет пучком... только что проверил...
вот...
http://jpegshare.net/thumbs/bc/2f/bc...7f37be81be.jpg

-----------------------------

Скриптец от WilB для JSPanel на пробу... может понравится пользовать ;)

отправка(добавление треков) в плейлист работает через on_notify_data через скрипт кнопок библиотеки...
код кнопки добавления в плейлист...
Код:

new Button(0, bh*2, B.width, B.height, ANIM_BUT_L, se, function () {
try {
    window.NotifyOthers("library", "send_to_pl");
    WshShell.SendKeys("^");
    WshShell.Run("taskkill /f /im ctrl.exe",0);
      } catch(e) {};
      recalc_dimensions();
      window.Repaint();
})


seriousstas 23.06.2016 18:48

duzzy
А вот с CUE на примере 1999 - Slipknot [declipped]
проблема остаётся ...
Цитата:

Ты имел ввиду тот скрипт библиотеки где еще не было картинок(обложки фоном) ?
Да - он справляется со всем без манипуляций (нужен WSH 1.5.10)..

kaamoss 23.06.2016 18:49

ЭЭ нее, ни фига. Такой фокус выходит только с нарезанными трэками.

Проверьте вот этот альбом.

seriousstas 23.06.2016 18:50

kaamoss
Почитай выше и я о том ..

kaamoss 23.06.2016 18:52

У меня есть сборка фубара она всегда всё правильно отображает, но я не понима. где посмотреть прописанные скрипты.
http://jpegshare.net/thumbs/f5/20/f5...c4d9541c00.jpg

kaamoss 23.06.2016 18:54

Цитата:

Сообщение от seriousstas (Сообщение 363295)
kaamoss
Почитай выше и я о том ..

Я просто не успел, ты на пару секунд раньше успел отписать))))

seriousstas 23.06.2016 18:55

Цитата:

Сообщение от kaamoss (Сообщение 363296)
У меня есть сборка фубара она всегда всё правильно отображает, но я не понима. где посмотреть прописанные скрипты.
http://jpegshare.net/thumbs/f5/20/f5...c4d9541c00.jpg

Там совсем другие компоненты ..
С этим - тоже всё нормально :
Код:

// ==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;
    }


duzzy 23.06.2016 19:02

seriousstas
Там в скрипте заморочка с индексами при отправке в плейлист... отсюда и трабл... как это править не понятно...

Скрипт WilB-а посмотри плиз, как он отправляет правильно или тоже с косяками...

seriousstas 23.06.2016 19:17

Цитата:

Сообщение от duzzy (Сообщение 363299)
seriousstas
Там в скрипте заморочка с индексами при отправке в плейлист... отсюда и трабл... как это править не понятно...

Скрипт WilB-а посмотри плиз, как он отправляет правильно или тоже с косяками...

Отправляет хорошо, но :
Цитата:

WSH Panel Mod (Library Tree v0.8 by Wilb): Ошибка выполнения Microsoft JScript:
Объект не поддерживает это свойство или метод
File:

Line: 2673, Col: 2

И не фильтрует основной файл . Висит знак вопроса и внутри
главный файл для CUE
_________________________________
PS выяснил, что ошибка из-за параллельно установленного WSH 1.5.10
c WSH 1.6 - JS дружит , но foo_cuefilter не работает ..

duzzy 23.06.2016 19:35

kaamoss
Цитата:

Я ни хрена не понимаю в этих скриптах и в этих панелях))))
Для меня лично лишь бы всё правильно работало и трэки правильно распологались)))

пс Мой делитантский ответ
Вникать придется потому как почти все панели скриптовые, и так как это не домашняя сборка то всегда есть свои нюансы...

можешь глянуть видосы
- по настройкам и т.д.(настройки показаны не все, но их большая часть)

- добавление новой панели в сборку

скрипты и некоторые ответы на твои вопросы ты сможешь найти в "Готовых сборках"... ссылка в подписи.

duzzy 23.06.2016 19:39

seriousstas

Цитата:

WSH Panel Mod (Library Tree v0.8 by Wilb): Ошибка выполнения Microsoft JScript:
Этот скрипт Library Tree v0.8 by Wilb для JScript Panel ;)

необходимо для старта...
Код:

REQUIREMENT

JScript Panel 1.1.0+


seriousstas 23.06.2016 19:41

Цитата:

Этот скрипт Library Tree v0.8 by Wilb для JScript Panel
Это я понял - он-бы вообще на WSH не запустился ;) Причина - выше :
http://pccar.ru/showpost.php?p=363301&postcount=1895
поставь рядом WSH 1.5.10 и вылезет ..
с 1.6.0 - норм

duzzy 23.06.2016 19:47

seriousstas
ага понял конфликтует с 1.5.10...:)
Цитата:

но foo_cuefilter не работает
и скорее всего не будет, потому как идет прямое обращение в индекс(библиотеку) фубара... т.е. показывает все как есть в папке, но при добавление в плейлист идет разбивка на треки.

------------------
Т.е. в этом варианте не используется прослойка в виде плейлиста как у вьетнамского товарища...
схема такая

библиотека ---> плейлист ---> скрипт (вьетнамский скипт)

библиотека ---> скрипт (скрипт WilB)

seriousstas 23.06.2016 19:52

Цитата:

Сообщение от duzzy (Сообщение 363306)
seriousstas
ага понял конфликтует с 1.5.10...:)

и скорее всего не будет, потому как идет прямое обращение в индекс(библиотеку) фубара... т.е. показывает все как есть в папке, но при добавление в плейлист идет разбивка на треки.

Ясно , думаю мож немного подковырять старую version "1.0" :
http://pccar.ru/showpost.php?p=363298&postcount=1893
С ней ведь никаких проблем вообще ..
Ну зачем нам знаки вопроса и лишние файлы в "дереве" ?

duzzy 23.06.2016 20:39

Цитата:

Сообщение от seriousstas (Сообщение 363308)
Ясно , думаю мож немного подковырять старую version "1.0" :
http://pccar.ru/showpost.php?p=363298&postcount=1893
С ней ведь никаких проблем вообще ..
Ну зачем нам знаки вопроса и лишние файлы в "дереве" ?

подковырять можно только что, я уже плохо помню что с ней было не так...
и что в нее добавлять ?

А вот про знаки вопроса не понял, где они возникают, и какие лишние файлы ?

---------------------
Я видос сейчас сниму по разнице между Album List и скриптом от WilB, и сюда сброшу.

Видос с разницей(звук в видео кривой не правильно настроен не обращай внимания)

---------------------

Проверил вот этот вариант что ты предложил http://pccar.ru/showpost.php?p=363298&postcount=1893 он так же не правильно отправляет в плейлист... первый трек становится не первым ;)

duzzy 23.06.2016 22:00

Ну похоже я нашел решение проблемы :)... сортировка при отправке в плейлист... при таком варианте работает и отправляет треки в правильном порядке...
т.е. если сделать дабл на папке/альбоме то будет играть первый трек в альбоме как указано в теге...
Если нужно добавлю опцию по вкл/отключению этой сортировки ?

----------------------

Короче кому нужно вот скрипт...

Добавлена опция вкл/откл. сортировку при добавлении в плейлист находится в Properties и называется...
_SYSTEM: Sorting tracks on APPLY & ADD по умолчанию включена true(если нужно выключить сменить значение на false)

Скрипт можно просто заменить в сборке при этом настройки в Properties можно не сбрасывать.

seriousstas 23.06.2016 23:24

Цитата:

А вот про знаки вопроса не понял, где они возникают
Во главе цельных файлов, что не удалены foo_cuefilter

Цитата:

Сообщение от duzzy (Сообщение 363323)
сортировка при отправке в плейлист...

оно! , заменил в сборке .. Ранее почему-то не придавал значения,
думал в плейлисте косяк .

заодно чуть поправил Пикмерт :
http://rgho.st/7YMZhXYr2/thumb.png

seriousstas 24.06.2016 00:13

Цитата:

Видос с разницей(звук в видео кривой не правильно настроен не обращай внимания)
:good:
Хорошо , что сейчас есть выбор - отличный задел на будущее .
ещё-бы br3tt чем-то порадовал ..
duzzy
а что это за механизм создания сборки с упаковкой в dll ?:
http://flipout69.deviantart.com/art/...-5-1-407758948

duzzy 24.06.2016 01:02

Цитата:

Сообщение от seriousstas (Сообщение 363329)
Во главе цельных файлов, что не удалены foo_cuefilter


оно! , заменил в сборке .. Ранее почему-то не придавал значения,
думал в плейлисте косяк .

заодно чуть поправил Пикмерт :
http://rgho.st/7YMZhXYr2/thumb.png

Хмм... странно... у меня все правильно показывает в скрипте Вилба

Да я тоже на это до сегодняшнего дня не обращал внимания, косяк конечно но не сильно криминальный... все треки из папки присутствуют, а это значит что почти все ровно:smile1:

Красивый Пикметр получился, жаль на моем разрешении не все правильно влезает.

duzzy 24.06.2016 01:07

Цитата:

Сообщение от seriousstas (Сообщение 363332)
:good:
Хорошо , что сейчас есть выбор - отличный задел на будущее .
ещё-бы br3tt чем-то порадовал ..
duzzy
а что это за механизм создания сборки с упаковкой в dll ?:
http://flipout69.deviantart.com/art/...-5-1-407758948

Да сейчас есть из чего выбирать не то что раньше:big:

С Бреттом списывался не так давно, он в творческом отпуске))) за темой следит но пока отдыхает.:smile1:
Из разговора было понятно что его немного все достало.

Про упаковку в dll еще не слышал... интересно надо расковырять и посмотреть что там:spiteful:

duzzy 24.06.2016 01:14

seriousstas

Не пойму а где там и что упаковано в dll... по ссылке обычный конфиг сборки вроде, или я ошибаюсь...

seriousstas 24.06.2016 01:35

Цитата:

Сообщение от duzzy (Сообщение 363336)
seriousstas

Не пойму а где там и что упаковано в dll... по ссылке обычный конфиг сборки вроде, или я ошибаюсь...

По основной ссылке :
http://www.deviantart.com/download/4...&ts=1466718154
но похоже это просто доп dll библиотека Фубара , а так читал ранее где-то , вот и подумал )

duzzy 24.06.2016 02:02

Цитата:

Сообщение от seriousstas (Сообщение 363340)
По основной ссылке :
http://www.deviantart.com/download/4...&ts=1466718154
но похоже это просто доп dll библиотека Фубара , а так читал ранее где-то , вот и подумал )

Не там в обычной ссылке которая справа просто пустышка, на DA иначе не создать тему чтоб потом туда инфу выложить(у них очень тупо организовано создание тем/постов)...

Он про это пишет чуть ниже...
http://jpegshare.net/thumbs/02/fc/02...f0764f252d.jpg

Сборочка на самом деле так себе, очень много цветных кнопок))) а функционала очень мало и пользоваться не удобно... пробовал мне не понравилась, мне больше Zetro нравилась я на нее мод делал:smile1:, еще CaTRoX прикольная темка...
На DA много прикольных тем но они как правило из очень старых и не все обновляются.

kaamoss 24.06.2016 09:09

Цитата:

Сообщение от duzzy (Сообщение 363323)
Ну похоже я нашел решение проблемы :)... сортировка при отправке в плейлист... при таком варианте работает и отправляет треки в правильном порядке...
т.е. если сделать дабл на папке/альбоме то будет играть первый трек в альбоме как указано в теге...
Если нужно добавлю опцию по вкл/отключению этой сортировки ?

----------------------

Короче кому нужно вот скрипт...

Добавлена опция вкл/откл. сортировку при добавлении в плейлист находится в Properties и называется...
_SYSTEM: Sorting tracks on APPLY & ADD по умолчанию включена true(если нужно выключить сменить значение на false)

Скрипт можно просто заменить в сборке при этом настройки в Properties можно не сбрасывать.


Объясните для одарённых. как скрипт этот добавить?:be:

seriousstas 24.06.2016 12:15

Цитата:

Сообщение от kaamoss (Сообщение 363348)
Объясните для одарённых. как скрипт этот добавить?:be:

пкм>Preferences>Show Scripts - замени и примени скрипт .

duzzy показывал, где и что :
http://pccar.ru/showpost.php?p=363303&postcount=1896


duzzy
Цитата:

Красивый Пикметр получился, жаль на моем разрешении не все правильно влезает.
Уменьшить ширину можно убрав некоторые частоты в графе Spectrum Analizer. В опциях Пикметра и Анализатора есть Size - ширина колонок,
ну и шрифт (его размер) так-же влияет на ширину

duzzy 24.06.2016 12:42

Цитата:

Сообщение от kaamoss (Сообщение 363348)
Объясните для одарённых. как скрипт этот добавить?:be:

- добавление новой панели/скрипта в сборку

замена скрипта в панели очень простое действие, элементарное...
для этого нужно просто мышой покликать несколько раз...

правый клик на панели со скриптом, далее в меню выбрать Configure или Show Script откроется редактор скрипта, далее в редакторе выделить весь скрипт и удалить его, далее скаченный файл с новым скриптом открыть в блокноте выделить весь код скопировать, далее переходим в открытый ранее редактор скрипта и вставляем скопированный код, далее жмем кнопки Apply затем OK редактор закроется и на панели появится работающий скрипт библиотеки.

Затем нужно сбросить старые настройки(переменные) от прошлого скрипта, делаем почти тоже что и в начале... правый клик на панели со скриптом в меню выбрать Properties или Show Properties, откроется окно настроек, в верхней части окна нужно нажать кнопку Clear, затем в нижней части окна нажать кнопки Apply затем OK... тем самым мы сбросили настройки.


Эти действия действительны для каждого установленного в сборку скрипта, т.е. таким образом можно заменить/обновить скрипт в любой панели сборки.
И я настоятельно рекомендую посмотреть видео.

duzzy 24.06.2016 13:06

seriousstas

Цитата:

Уменьшить ширину можно убрав некоторые частоты
:) в этом то и есть фишка пикметра, хочется все частоты видеть))) а при 800х600 они получаются тонюсенькие и вся красота смазывается... блин... фубар классный плеер но с визуализацией очень серьезный напряг.
Причем нельзя сказать что ее нет, просто сделана она как то через одно место... и если разбирать сборку то можно увидеть что большая часть времени при создании сборки была потрачена именно на вкорячивание визуализации.

vladj 24.06.2016 14:26

Вложений: 1
Цитата:

Сообщение от seriousstas (Сообщение 363363)
Уменьшить ширину можно убрав некоторые частоты

Естественно тем кто едет на стерео не нужен пикметр пятиканальный,
оставить только фронты. Больше приходится заботится не о ширине столбиков,
а о том что-бы значения не налазили друг на друга. Я в первую очередь ставлю те,
где частота с десятыми, а не с сотыми. Приходится с полчаса потыкатся.
Примерно так получается при ширине 800 ...

kaamoss 24.06.2016 18:31

Спасибо всем большое. Разобрался.
Кое как допёрло что этот скрипт надо в библиотеке применить)))))))

А так вроде всё нормально открывается и определяется:)

duzzy 25.06.2016 11:21

kaamoss

Пожалуйста !

Цитата:

Кое как допёрло что этот скрипт надо в библиотеке применить)))))))
Смотри фубар можно рассматривать как конструктор в виде панелей, т.е. на примере библиотеки --- то что ты видишь в библиотеке, список папок в виде дерева это панель --- панель эта скриптовая, т.е. для ее работы необходим скрипт и панель которая запускает(компилит скрипт при запуске фубара), если убрать скрипт то будет просто пустая панель.

Т.е. по сути тема сборки собрана из панелей... например как кирпичный дом из кирпичей, либо конструктор лего...

Сейчас наглядно покажу чтоб ты понимал как собрана тема сборки...

http://jpegshare.net/thumbs/5d/dd/5d...f980bfd6ac.jpg

http://jpegshare.net/thumbs/88/40/88...189aaca41c.jpg

duzzy 25.06.2016 12:28

Сегодня попозжей вечерком выложу скрипт Get Covers (Artwork) от kgena_ua, с модификацией под палец

Это всеядный скрипт обложек)))
http://jpegshare.net/thumbs/eb/dc/eb...f325ba7d9b.jpg

Видос как работает
(добавлю еще переключение режимов показа обложки по даблу)

seriousstas 25.06.2016 14:43

Цитата:

Это всеядный скрипт обложек)))
Инет-радио картинки покажет ?
Оригинал знаю - нет , но может в Твоей редакции сможет ..

duzzy 25.06.2016 16:48

Цитата:

Сообщение от seriousstas (Сообщение 363426)
Инет-радио картинки покажет ?
Оригинал знаю - нет , но может в Твоей редакции сможет ..

Гена проводил эксперименты у него показывало... на фубар.ру кто то просил его сделать... не знаю я пробовал по его рецепту сделать не очень получилось, были затыки в отображении, тормоза а иногда все это хозяйство крашилось... попробовать попробую но не обещаю что получится.
По его схеме если все правильно помню скрипты работают в паре инет-картинки и этот.

+ я сейчас просто немного другим занят, делаю флэт темку на новых скриптах... ;)

duzzy 25.06.2016 17:29

seriousstas

Если видел или помнишь где были посты на фубар.ру по отображению инет-картинок в скрипте GetCovers, скинь мне ссылку плиз... я порылся там и не могу найти, помню что видел где то но не найти...


Часовой пояс GMT +4, время: 19:04.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot