Скрипты для foo_uie_wsh_panel_mod

Список разделов foobar2000 Секреты foobar2000

Описание: Кнопочки, конфиги, секреты, советы.

Сообщение #221 macarych » 03.02.2015, 00:05

seriousstas:Возможно, но почему только первое нажатие ?
seriousstas, как человек может дать тебе ответ, не имея тачскрина и, следовательно, возможности проверить? На обычном мониторе и с мышкой ничего такого не происходит.
seriousstas:Тестил на сенсорном моноблоке 21' и в машине 7'
seriousstas:И повторюсь делал тэсты на совершенно разных ПК
в смысле один тачскрин большой а другой маленький? Да, это оочень разные ПК.
Последний раз редактировалось macarych 03.02.2015, 00:11, всего редактировалось 1 раз.
macarych M
Аватара
Репутация: 417
С нами: 15 лет 2 месяца

Сообщение #222 kgena_ua » 03.02.2015, 00:10

Да macarych, тяжело.
Я вижу, нажимается A а выводит Q/ Затем нажимая A выводится A.
seriousstas, а попробуйте поменять стр. 197 - 199 на

line1 = y >= t_row1 && y <= t_row1 + t_height ? true : false;
line2 = y >= t_row2 && y <= t_row2 + t_height ? true : false;
line3 = y >= t_row3 && y <= t_row3 + t_height ? true : false;
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #223 seriousstas » 03.02.2015, 00:15

Про мышь и я говорил, что ОК , но
предположил , что поиск под палец делался ,
как
Не уверен , но возможно так :
Разработка для сенсорного управления без сенсорного устройства :
https://software.intel.com/ru-ru/articles/handlin ... nput-in-windows-8-applications
http://www.microsoft.com/ru-ru/download/details.aspx?id=34673

Добавлено спустя 5 минут 2 секунды:
в смысле один тачскрин большой а другой маленький? Да, это оочень разные ПК.
Верно - разные и по железу и сенсорные панели с разными свойствами и даже способом подключения к матери ,
и то , что на 7` палец в 2 раза больше кнопки с буквой - а на 21' (сенсорный моноблок) вариант с задеванием соседней
кнопки уже отпадает - НЕ?

Добавлено спустя 57 секунд:
seriousstas, а попробуйте поменять стр. 197 - 199 на

line1 = y >= t_row1 && y <= t_row1 + t_height ? true : false;
line2 = y >= t_row2 && y <= t_row2 + t_height ? true : false;
line3 = y >= t_row3 && y <= t_row3 + t_height ? true : false;
ок

Добавлено спустя 16 минут 56 секунд:
macarych :drunk: ...
когда Вы поймёте, что я на Вашей стороне!?
kgena_ua
Спасибо - всё ОК !
Завтра доберусь до авто - надеюсь тоже будет норм!
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #224 kgena_ua » 03.02.2015, 01:39

seriousstas:Спасибо - всё ОК !
seriousstas, т.е. на дом. тачскрине что-то изменилось?
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #225 seriousstas » 03.02.2015, 01:53

Да , работает ввод без проблем !
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #226 kgena_ua » 03.02.2015, 02:04

seriousstas:выделяемая область смещается и так остаётся. (http://pccar.ru/showpost.php?p=319477)
Может попробовать перенести переключение раскладки в строку меню.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #227 seriousstas » 03.02.2015, 02:09

Ок , например вместо рейтинга (предполагаю эта клавиша лишняя в CarPC)
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #228 kgena_ua » 03.02.2015, 02:19

seriousstas:например вместо рейтинга (предполагаю эта клавиша лишняя в CarPC)
А почему лишняя ? Я так понимаю Вы на CarPC воспроизводите свою библиотеку, например с домашнего ПК, где выставлены рейтинги.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #229 seriousstas » 03.02.2015, 03:43

Я не выставляю - предпочитаю поальбомное прослушивание и помню свои предпочтения ,
а в машину из 15 ТБ попадает только несколько альбомов ,
Не слышал и пожеланий о рейтингах в теме Фубара для Икара ...
С собой (например на флэхе) , итак берёшь самое самое
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #230 vladj » 03.02.2015, 12:30

seriousstas:помню свои предпочтения / в машину попадает только несколько альбомов
Прости, но тут ты не последователен...а зачем тогда тебе поиск, только ради прикола, удивлять окружающих ?
Я тоже противник рейтингов и кол-ва прослушанного и вот решил попробовать новоявленный скрипт поиска.
Будете смеятся, но...(музыки у меня на порядок меньше 15 Tb и вся в машине)...неужели из-за возраcта и памяти такой трабл...
Я с изумлением увидел, что не могу начать поиск, ибо просто не помню названия артистов -альбомов....не то что-бы не помню,
но впал в какую-то простацию...оказывается мне нужно видеть свою библиотеку, что-бы решить...а что-бы сейчас послушать.
Скриптов написано для фубара немеряно (у пользователей грамотных это хобби), но наверное нужно как-то выбирать из них
квинтэссэнцию, т.е. а нужен-ли данный скрипт в твоей сборке непременно.
Для меня большим минусом является то, что самому уже не научится и самое главное даже переделать под свои хотелки готовый
скрипт не получается. А как было-бы хорошо появление у нас на сайте очень грамотного скриптописателя, типа скорой помощи...
пишешь пожелание, ему раз плюнуть переделать, мне хорошо и он удовольствие получил от того, что помог кому-то.
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 2 месяца

Сообщение #231 seriousstas » 03.02.2015, 14:24

Попадает - имел ввиду добавляется к тому ,что есть (не стоит цепляться к словам)
Внутри 500 GB SSD-шка + Что-то меняется на флешке .
Попробуйте простой эксперимент :
Качните 10-ток альбомов DVD-AUDIO (именно этот звуковой формат без видео)
и попробуйте в Фубаре быстро найти в развёрнутом плейлисте нужный альбом (его начало и название) .
Не выйдет , потому-что нет тегов , только набор букв и цифр .
И это длинные списки двух зон (стерео и многоканал) , а между ними название альбома.
Окружающие в машине редко (просто некому хвалится :) ), а так , ранее я вешал на свободную кнопку руля
вывод родной панели поиска и клавой набирал например слово Crystal -
далее быстро попадал в начало альбома Crystal Method .
На все 3 секунды вместо 20-ти
Конечно, иногда искал любимый трек для супруги
Не забывайте также важную деталь - ранее многие пользовали V 4.5 Макарыча , а там небыло прокрутки пальцем-
только скролом, что на 7` не удобно. C WSH начиналась и новая сборка ...
С этим вариантом поиска с клавиатурой всё ещё удобнее .
Поэтому мне поиск необходим
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #232 kgena_ua » 03.02.2015, 15:40

Переключение раскладки перенес в строку "меню". Теперь проблемы с некорректной отрисовкой, о которой писал seriousstas, отпали.
По рейтингу.
Информационными являются первые пять набранных символов. К примеру, если набрать12345 отобразятся треки с рейтингом 1, 2,3 и т.д.
Рейтинг можно удалить:
стр.43. ab_M = Array("all","artist","album","title","genre","date","rating"); - удалить выделенное.

Код: Выделить всё
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)); }

var font = gdi.Font("arial",12,1);
var font2 = gdi.Font("arial",10,0);
var ww = window.Width;   
var wh = window.Height; 

DT_CENTER = 0x00000001;
DT_RIGHT = 0x00000002;
DT_SINGLELINE = 0x00000020;
DT_VCENTER = 0x00000004;

var t_color = RGB(180,180,180);
var m_color = RGB(120,120,120);
var sel_color = RGB(250,250,250);
var sel_bg_color = RGB(100,100,100);

var t_row = 1, t_row1, t_row2, t_row3, t_height;
var string = "", search_query;
var tag_search = window.GetProperty("tag_search", 1);
var previous_pll = plman.ActivePlaylist;

var sort = "%album artist%|%date%|%album%|%discnumber%|%tracknumber%|%title%";
var on_mouse = false;
var ab, ab1, ab2;
var ab_I, ab_C, ab_F, ab_M;
var it, it1, it2, itM;
var line1, line2;
var lang = 1;

function on_paint(gr) {
    gr.FillSolidRect (0, 0, ww, wh, RGB(30,30,30));
   
    t_height = gr.CalcTextheight("abc", font) + 3;
    t_row1 = t_row + t_height + 0;
    t_row2 = t_row1 + t_height + 0;
    t_row3 = t_row2 + t_height + 0;

    ab_I = Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","<","...")
    ab_F = Array("1","2","3","4","5","6","7","8","9","0","/","'","#",",","-",":"," ","<","...")
    ab_C = Array("А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я"," ","<","...")   
    ab_M = Array("all","artist","album","title","genre","date","rating");
   
    if (lang == 1) ab_M = ab_M.concat("ая","09");
    if (lang == 2) ab_M = ab_M.concat("az","09");
    if (lang == 3) ab_M = ab_M.concat("az","ая");
   
    itM = ab_M.length;

    if (lang == 1) ab = ab_I;
    if (lang == 2) ab = ab_C;
    if (lang == 3) ab = ab_F;
       
    it = ab.length;

    it1 = Math.round(it/2);
    it2 = it - it1;
    ab1 = ab.splice(0,it1);
    ab2 = ab.splice(0,it2);

    if(on_mouse && line1) gr.FillSolidRect (x_col1, t_row1, ww / it1, t_height, sel_bg_color);
    if(on_mouse && line2) gr.FillSolidRect (x_col2, t_row2, ww / it2, t_height, sel_bg_color);
    if(on_mouse && line3) gr.FillSolidRect (x_col3, t_row3, ww / itM, t_height, sel_bg_color);

    gr.GdiDrawText(string, font, search ? sel_color : t_color, 10, t_row, ww , t_height, DT_SINGLELINE | DT_VCENTER);

    for (var i = 0; i < it1; i = i + 1) {
        color = x_color > ww / it1 * i && x_color < ww / it1 * (i + 1) && on_mouse && line1 ? sel_color : t_color;
        gr.GdiDrawText(ab1[i] == " " ? "_" : ab1[i], font, color, ww / it1 * i, t_row1, ww / it1 , t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);   
    }
   
    for (var i = 0; i < it2; i = i + 1) {
        color = x_color > ww / it2 * i && x_color < ww / it2 * (i + 1) && on_mouse && line2 ? sel_color : t_color;
        gr.GdiDrawText(ab2[i] == " " ? "_" : ab2[i], font, color, ww / it2 * i, t_row2, ww / it2 , t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);   
    }
   
    for (var i = 0; i < itM; i = i + 1) {
        color = (x_color > ww / itM * i && x_color < ww / itM * (i + 1) && on_mouse && line3) || tag_search == i + 1 ? sel_color : m_color;
        gr.GdiDrawText(ab_M[i], font2, color, ww / itM * i, t_row3, ww / itM , t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);   
    }

//    gr.GdiDrawText("", font2, RGB(200,200,200), 0, 5, ww  , wh, DT_RIGHT);

}

var ch;

function on_mouse_lbtn_up (x, y){
    if (!line1 && !line2 && !line3) return; // ???
    if (!search) previous_pll = plman.ActivePlaylist;
    library_view_idx();
   
    for (var i = 0; i < it1; i = i + 1) {
        if (x > ww / it1 * i && x < ww / it1 * (i + 1) && line1) {ch = ab1[i]}
    }
    for (var i = 0; i < it2; i = i + 1) {
        if (x > ww / it2 * i && x < ww / it2 * (i + 1) && line2) {ch = ab2[i]}
    }
    for (var i = 0; i < itM; i = i + 1) {
        if (x > ww / itM * i && x < ww / itM * (i + 1) && line3) {
            if (i < itM - 2) {
                tag_search = i + 1; tag_search_change();return;
            } else {
                ch = ab_M[i] }
        }
    }

    window.Repaint();
    if (ch == "az") {ch = ""; lang = 1; return};
    if (ch == "ая") {ch = ""; lang = 2; return};
    if (ch == "09") {ch = ""; lang = 3; return};
    if (ch == "<")  {ch = ""; string = string.substring(0,string.length - 1)};   
    if (ch == "..."){ch = ""; string = ""};

    string = string + ch;   
    string = string.charAt(0) == " " ? "" : string;
    string = string.replace("  "," ");
    if (string.length > 0 || search) pll_search();
}

var search = false;
var count;

function pll_search() {
   
    remove_pll("search");
   
    switch(tag_search) {
        case 1:
            search_query =  "%artist% HAS " + string + " OR " + "%album% HAS " + string + " OR " + "%title% HAS " + string + " OR " + "%genre% HAS " + string + " OR " + "%date% HAS " + string;
            break;
        case 2:
            search_query =  "%artist% HAS " + string;
            break;
        case 3:
            search_query =  "%album% HAS " + string;
            break;
        case 4:
            search_query =  "%title% HAS " + string;
            break;
        case 5:
            search_query =  "%genre% HAS " + string;
            break;
        case 6:
            search_query =  "%date% HAS " + string;
            break;
        case 7:
            search_query =  "rating HAS "  + string.charAt(0) + " OR " + "%rating% HAS " + string.charAt(0)
                            + " OR " + "rating HAS "  + string.charAt(1) + " OR " + "%rating% HAS " + string.charAt(1)
                            + " OR " + "rating HAS "  + string.charAt(2) + " OR " + "%rating% HAS " + string.charAt(2)
                            + " OR " + "rating HAS "  + string.charAt(3) + " OR " + "%rating% HAS " + string.charAt(3)           
                            + " OR " + "rating HAS "  + string.charAt(4) + " OR " + "%rating% HAS " + string.charAt(4)           
            ;
            break;
    }
   
    idx = plman.PlaylistCount;
    fb.CreateAutoPlaylist(idx, "search", search_query, sort, 0);
    count = fb.PlaylistItemCount(idx)
   
    if (count > 0) {
        fb.ActivePlaylist = idx; search = true
    } else {
//        fb.ActivePlaylist = previous_pll;   // ???
//        fb.ActivePlaylist = 0;            // ???
        fb.ActivePlaylist = lib_v_idx;    // ???
        remove_pll("search");
        search = false;
    }
}

function remove_pll(pll_name){
    search = false;
    remove_idx = fb.PlaylistCount;
    for (var i = 0; i < remove_idx; i++) {
       if (fb.GetPlaylistName(i) == pll_name) {fb.RemovePlaylist(i)}
    }
}

var lib_v_idx;
function library_view_idx(){
    idx = fb.PlaylistCount;
    for (var i = 0; i < idx; i++) {
       if (fb.GetPlaylistName(i) == "Library view") {lib_v_idx = i}
    }
}

function on_playback_starting(cmd, is_paused) {
    string = "";
    search = false;
    if (fb.GetPlaylistName(fb.ActivePlaylist) != "search") {remove_pll("search");}
}

var x_col1, x_col2;
var x_color;

function on_mouse_move(x,y) {
    window.SetCursor(32649);
    on_mouse = true;
    line1 = y >= t_row1 && y <= t_row1 + t_height ? true : false;
    line2 = y >= t_row2 && y <= t_row2 + t_height ? true : false;
    line3 = y >= t_row3 && y <= t_row3 + t_height ? true : false;
    x_color = x;

    for (var i = 0; i < it1; i = i + 1) {
        if (x > ww / it1 * i) {x_col1 = ww / it1 * i}
    }
    for (var i = 0; i < it2; i = i + 1) {
        if (x > ww / it2 * i) {x_col2 = ww / it2 * i}             
    }
    for (var i = 0; i < itM; i = i + 1) {
        if (x > ww / itM * i) {x_col3 = ww / itM * i}             
    }     
    window.Repaint();
}

function on_size(){   
    ww = window.Width;   
    wh = window.Height;   
}   

function on_mouse_leave() {
    window.SetCursor(32512);
    on_mouse = false;
    window.Repaint();
}

function on_mouse_rbtn_up (x, y){ 
    var _menu = window.CreatePopupMenu();
    var i = 1;

    _menu.AppendMenuItem(0x00000000, i++, "all");
    _menu.AppendMenuItem(0x00000000, i++, "artist");
    _menu.AppendMenuItem(0x00000000, i++, "album");
    _menu.AppendMenuItem(0x00000000, i++, "title");
    _menu.AppendMenuItem(0x00000000, i++, "genre");
    _menu.AppendMenuItem(0x00000000, i++, "date");
    _menu.AppendMenuItem(0x00000000, i++, "rating");

    _menu.CheckMenuRadioItem(1, i, tag_search);
    _menu.EnableMenuItem(tag_search, 1);   
   
    _menu.AppendMenuItem(0x00000800, 0, 0);   
    _menu.AppendMenuItem(0x00000000, 10, "Configure ...");

    ret = _menu.TrackPopupMenu(x, y);
    if (ret == 0) return;

    switch (ret) {
    case 1:
        tag_search = 1;
        tag_search_change();
        break;
    case 2:
        tag_search = 2;
        tag_search_change();
        break;
    case 3:
        tag_search = 3;
        tag_search_change();
        break;
    case 4:
        tag_search = 4;
        tag_search_change();
        break;
    case 5:
        tag_search = 5;
        tag_search_change();
        break;
    case 6:
        tag_search = 6;
        tag_search_change();
        break;
    case 7:
        tag_search = 7;
        tag_search_change();
        break;
    case 10:   
        window.ShowConfigure();   
        break;   
    }
    _menu.Dispose();
    return true;
}

function tag_search_change(){
    window.SetProperty("tag_search", tag_search);
    if (string.length > 0) pll_search();
}

Добавлю еще один вариант.
Все вычисления координат завесил на одну кнопку т.к. мне кажется, что тачскрин как-то по своему понимает функцию on_mouse_move, где у меня и были вычисления по Y (нажималась A, а отображалась Q). Теперь будет и на кнопке on_mouse_lbtn_up дублироваться.
Код: Выделить всё
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)); }

var font = gdi.Font("arial",12,1);
var font2 = gdi.Font("arial",10,0);
var ww = window.Width;   
var wh = window.Height; 

DT_CENTER = 0x00000001;
DT_RIGHT = 0x00000002;
DT_SINGLELINE = 0x00000020;
DT_VCENTER = 0x00000004;

var t_color = RGB(180,180,180);
var m_color = RGB(120,120,120);
var sel_color = RGB(250,250,250);
var sel_bg_color = RGB(100,100,100);

var t_row = 1, t_row1, t_row2, t_row3, t_height;
var string = "", search_query;
var tag_search = window.GetProperty("tag_search", 1);
var previous_pll = plman.ActivePlaylist;

var sort = "%album artist%|%date%|%album%|%discnumber%|%tracknumber%|%title%";
var on_mouse = false;
var ab, ab1, ab2;
var ab_I, ab_C, ab_F, ab_M;
var it, it1, it2, itM;
var line1 = false, line2 = false, line3 = false;
var lang = 1;

function on_paint(gr) {
    gr.FillSolidRect (0, 0, ww, wh, RGB(30,30,30));
   
    t_height = gr.CalcTextheight("abc", font) + 3;
    t_row1 = t_row + t_height + 0;
    t_row2 = t_row1 + t_height + 0;
    t_row3 = t_row2 + t_height + 0;

    ab_I = Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","<","...")
    ab_F = Array("1","2","3","4","5","6","7","8","9","0","/","'","#",",","-",":"," ","<","...")
    ab_C = Array("А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я"," ","<","...")   
    ab_M = Array("all","artist","album","title","genre","date","rating");
   
    if (lang == 1) ab_M = ab_M.concat("ая","09");
    if (lang == 2) ab_M = ab_M.concat("az","09");
    if (lang == 3) ab_M = ab_M.concat("az","ая");
   
    itM = ab_M.length;

    if (lang == 1) ab = ab_I;
    if (lang == 2) ab = ab_C;
    if (lang == 3) ab = ab_F;
       
    it = ab.length;

    it1 = Math.round(it/2);
    it2 = it - it1;
    ab1 = ab.splice(0,it1);
    ab2 = ab.splice(0,it2);

    if(on_mouse && line1) gr.FillSolidRect (x_col1, t_row1, ww / it1, t_height, sel_bg_color);
    if(on_mouse && line2) gr.FillSolidRect (x_col2, t_row2, ww / it2, t_height, sel_bg_color);
    if(on_mouse && line3) gr.FillSolidRect (x_col3, t_row3, ww / itM, t_height, sel_bg_color);

    gr.GdiDrawText(string, font, search ? sel_color : t_color, 10, t_row, ww , t_height, DT_SINGLELINE | DT_VCENTER);

    for (var i = 0; i < it1; i = i + 1) {
        color = x_color > ww / it1 * i && x_color < ww / it1 * (i + 1) && on_mouse && line1 ? sel_color : t_color;
        gr.GdiDrawText(ab1[i] == " " ? "_" : ab1[i], font, color, ww / it1 * i, t_row1, ww / it1 , t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);   
    }
   
    for (var i = 0; i < it2; i = i + 1) {
        color = x_color > ww / it2 * i && x_color < ww / it2 * (i + 1) && on_mouse && line2 ? sel_color : t_color;
        gr.GdiDrawText(ab2[i] == " " ? "_" : ab2[i], font, color, ww / it2 * i, t_row2, ww / it2 , t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);   
    }
   
    for (var i = 0; i < itM; i = i + 1) {
        color = (x_color > ww / itM * i && x_color < ww / itM * (i + 1) && on_mouse && line3) || tag_search == i + 1 ? sel_color : m_color;
        gr.GdiDrawText(ab_M[i], font2, color, ww / itM * i, t_row3, ww / itM , t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);   
    }

//    gr.GdiDrawText(line1 + " " + line2 + " " + line3, font2, RGB(200,200,200), 0, 5, ww - 10  , wh, DT_RIGHT);
}

var ch;
var x_col1, x_col2, x_col3;
var x_color;

function on_mouse_lbtn_up (x, y){
    line1 = y >= t_row1 && y <= t_row1 + t_height ? true : false;
    line2 = y >= t_row2 && y <= t_row2 + t_height ? true : false;
    line3 = y >= t_row3 && y <= t_row3 + t_height ? true : false;
   
    if (!line1 && !line2 && !line3) return; // ???
    if (!search) previous_pll = plman.ActivePlaylist;
    library_view_idx();
   
    for (var i = 0; i < it1; i = i + 1) {
        if (x > ww / it1 * i && x < ww / it1 * (i + 1) && line1) {ch = ab1[i]}
    }
    for (var i = 0; i < it2; i = i + 1) {
        if (x > ww / it2 * i && x < ww / it2 * (i + 1) && line2) {ch = ab2[i]}
    }
    for (var i = 0; i < itM; i = i + 1) {
        if (x > ww / itM * i && x < ww / itM * (i + 1) && line3) {
            if (i < itM - 2) {
                tag_search = i + 1; tag_search_change();return;
            } else {
                ch = ab_M[i] }
        }
    }

    if (ch == "az") {ch = ""; lang = 1; return};
    if (ch == "ая") {ch = ""; lang = 2; return};
    if (ch == "09") {ch = ""; lang = 3; return};
    if (ch == "<")  {ch = ""; string = string.substring(0,string.length - 1)};   
    if (ch == "..."){ch = ""; string = ""};

    string = string + ch;   
    string = string.charAt(0) == " " ? "" : string;
    string = string.replace("  "," ");
    if (string.length > 0 || search) pll_search();
}

var search = false;
var count;

function pll_search() {
   
    remove_pll("search");
   
    switch(tag_search) {
        case 1:
            search_query =  "%artist% HAS " + string + " OR " + "%album% HAS " + string + " OR " + "%title% HAS " + string + " OR " + "%genre% HAS " + string + " OR " + "%date% HAS " + string;
            break;
        case 2:
            search_query =  "%artist% HAS " + string;
            break;
        case 3:
            search_query =  "%album% HAS " + string;
            break;
        case 4:
            search_query =  "%title% HAS " + string;
            break;
        case 5:
            search_query =  "%genre% HAS " + string;
            break;
        case 6:
            search_query =  "%date% HAS " + string;
            break;
        case 7:
            search_query =  "rating HAS "  + string.charAt(0) + " OR " + "%rating% HAS " + string.charAt(0)
                            + " OR " + "rating HAS "  + string.charAt(1) + " OR " + "%rating% HAS " + string.charAt(1)
                            + " OR " + "rating HAS "  + string.charAt(2) + " OR " + "%rating% HAS " + string.charAt(2)
                            + " OR " + "rating HAS "  + string.charAt(3) + " OR " + "%rating% HAS " + string.charAt(3)           
                            + " OR " + "rating HAS "  + string.charAt(4) + " OR " + "%rating% HAS " + string.charAt(4)           
            ;
            break;
    }
   
    idx = plman.PlaylistCount;
    fb.CreateAutoPlaylist(idx, "search", search_query, sort, 0);
    count = fb.PlaylistItemCount(idx)
   
    if (count > 0) {
        fb.ActivePlaylist = idx; search = true
    } else {
//        fb.ActivePlaylist = previous_pll;   // ???
//        fb.ActivePlaylist = 0;            // ???
        fb.ActivePlaylist = lib_v_idx;    // ???
        remove_pll("search");
        search = false;
    }
}

function remove_pll(pll_name){
    search = false;
    remove_idx = fb.PlaylistCount;
    for (var i = 0; i < remove_idx; i++) {
       if (fb.GetPlaylistName(i) == pll_name) {fb.RemovePlaylist(i)}
    }
}

var lib_v_idx;
function library_view_idx(){
    idx = fb.PlaylistCount;
    for (var i = 0; i < idx; i++) {
       if (fb.GetPlaylistName(i) == "Library view") {lib_v_idx = i}
    }
}

function on_playback_starting(cmd, is_paused) {
    string = "";
    search = false;
    if (fb.GetPlaylistName(fb.ActivePlaylist) != "search") {remove_pll("search");}
}

function on_mouse_move(x,y) {
    window.SetCursor(32649);
    on_mouse = true;
    line1 = y >= t_row1 && y <= t_row1 + t_height ? true : false;
    line2 = y >= t_row2 && y <= t_row2 + t_height ? true : false;
    line3 = y >= t_row3 && y <= t_row3 + t_height ? true : false;
    x_color = x;

    for (var i = 0; i < it1; i = i + 1) {
        if (x > ww / it1 * i) {x_col1 = ww / it1 * i}
    }
    for (var i = 0; i < it2; i = i + 1) {
        if (x > ww / it2 * i) {x_col2 = ww / it2 * i}             
    }
    for (var i = 0; i < itM; i = i + 1) {
        if (x > ww / itM * i) {x_col3 = ww / itM * i}             
    }     

    window.Repaint();
}

function on_size(){   
    ww = window.Width;   
    wh = window.Height;   
}   

function on_mouse_leave() {
    window.SetCursor(32512);
    on_mouse = false;
    window.Repaint();
}

function on_mouse_rbtn_up (x, y){ 
    var _menu = window.CreatePopupMenu();
    var i = 1;

    _menu.AppendMenuItem(0x00000000, i++, "all");
    _menu.AppendMenuItem(0x00000000, i++, "artist");
    _menu.AppendMenuItem(0x00000000, i++, "album");
    _menu.AppendMenuItem(0x00000000, i++, "title");
    _menu.AppendMenuItem(0x00000000, i++, "genre");
    _menu.AppendMenuItem(0x00000000, i++, "date");
    _menu.AppendMenuItem(0x00000000, i++, "rating");

    _menu.CheckMenuRadioItem(1, i, tag_search);
    _menu.EnableMenuItem(tag_search, 1);   
   
    _menu.AppendMenuItem(0x00000800, 0, 0);   
    _menu.AppendMenuItem(0x00000000, 10, "Configure ...");

    ret = _menu.TrackPopupMenu(x, y);
    if (ret == 0) return;

    switch (ret) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
        tag_search = 7;
        tag_search_change();
        break;
    case 10:   
        window.ShowConfigure();   
        break;   
    }
    _menu.Dispose();
    return true;
}

function tag_search_change(){
    window.SetProperty("tag_search", tag_search);
    if (string.length > 0) pll_search();
}
Последний раз редактировалось kgena_ua 03.02.2015, 17:45, всего редактировалось 4 раз(а).
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #233 vladj » 03.02.2015, 16:27

seriousstas:Попробуйте простой эксперимент :
Качните 10-ток альбомов DVD-AUDIO (именно этот звуковой формат без видео)
Как 2 пальца об асфальт :smile: 10 альбомов в папку с названием (например) DVD-AUDIO, Альбом лист настроен на сортировку по папкам.
Панели настроены так, что при запуске фубара мы сразу видим панель библиотеки.
seriousstas:нет тегов , только набор букв и цифр
Это очень быстро правится...Правой по шапке, Свойства, выставляем артиста и название альбома, Применить.
Шапки альбомов в плейлисте будут прилично выглядеть, запускается альбом щелком по папке, инфа хранится в файлике dvda_metabase.
Итак...щелчком отправляем всю папку в EL плейлист, там видим шапки всех 10 альбомов. Щелчком по нужному запускаем...слушаем :smile:
Изображение
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 2 месяца

Сообщение #234 seriousstas » 03.02.2015, 17:06

kgena_ua
Ок , спасибо , вечером обкатаю

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

Про dvda_metabase знал (искал в нэте полную базу , не нашел) ,
а по вводу заголовка - хорошая идея!
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #235 seriousstas » 04.02.2015, 07:26

kgena_ua
Вопрос ,очистить поисковые символы после старта прослушивания не получается ,
здесь придётся только кнопкой <LIst из Фубара , или это можно сделать из поисковой панели ?
После поиска и выбора трека (например не верного) создаётся новый лист и кнопка очистки уже не действует .

Либо, как добиться перехода в основной плейлист после выбора трека ?
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #236 kgena_ua » 04.02.2015, 11:24

seriousstas, беде разбираться :smile:.
Я в основном работаю с библиотекой, где основным является плейлист с именем Library view.
Как работает в настоящий момент.
1. При любом совпадении (для удобства поисковая строка меняет цвет) создается и активизируется новый плейлист с именем search. Если продолжать дальше вводить символы и при этом совпадений не будет, идет переключение на пл.л. Library view:
стр.170 - вернуться на первый плейлист, стр. 171 на плейлист с именем Library view.
// fb.ActivePlaylist = 0;
fb.ActivePlaylist = lib_v_idx;

пл.л. search удаляется а строка набора (поисковые символы ) не очищается. Можно дальше продолжить поиск, удаляя ненужные символы или удалив всю строку....
2. "После поиска и выбора трека" (т.е. play) в настоящий момент поисковые символы очищаются и "очистить поисковые символы после старта прослушивания не получается". И чтоб вернуться в основной плейлист - "только кнопкой <LIst из Фубара ". "кнопка очистки уже не действует". Кнопка то действует, только очищать нечего :wink:.

Давайте попробуем заремить стр. 194 и 195 в функции on_playback_starting:
string = "";
search = false;
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #237 seriousstas » 04.02.2015, 20:23

kgena_ua
Макарыч предложил (https://www.youtube.com/watch?v=0duEy5M1Lx4&feature=youtu.be) удобный способ настройки Фубара "под себя" (три вида плейлистов на выбор) и для новичков в фубаростроении вроде меня, таким способом :
Есть две пустые панели для поиска , на которые я вешаю два одинаковых "листа" ELPlaylist .
Первое нажатие кнопки "Search" выводит Ваш поиск, второе прячет , где я переключаюсь на тот-же ELPlaylist (его копию)
Как было : При выборе искомого трека я кликал по нему - создавалась отдельная страница с результатами поиска search ,
кода я снова жал "Search", надеялся увидеть проигрываемый трек в главном списке , но это не получалось (даже командой now playing) .
заремить , как я понял означает добавить // спереди ?
string = "";
search = false;
Сделал , теперь происходит очистка , но увидеть трек в общем плейлисте не получается при нажатии на "Search" , то-есть закрытии панели поиска .

Может есть способ перехода в общий список сразу при выборе искомого трека ? ,
либо , если это не возможно , отображение его в списке при закрытии поисковой панели .
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #238 seriousstas » 23.02.2015, 22:28

Просьба поделится , если есть по аналогии : этот сикбар и для volume :
Код: Выделить всё
/////////////////////// бегущая строка - сикбар v.10.12.2010 \\\\\\\\\\\
//San_dr http://forum.oszone.net && Zin-Uru http://foobar2000.ru/forum\\
//var font = gdi.Font("Tahoma", 17, 1);
//var font = gdi.Font("AGOpus", 17, 0);
var font = gdi.Font("Arial", 17, 0);
var align = 0x00000003 | 0x00000008, align_scroll = 0x00000009;
var tf_string = ('[%title% —] Art: $if(%artist%,%artist%,•) •%codec%•[%playback_time%]/[%length%]');
var ww, pos_d = 3, q = 0, timer, g_drag = 0;
var start = true, stopped = false;
window.MinHeight = window.MaxHeight = 28;
function RGBA(r, g, b, a) {return ((a << 24) | (r << 16) | (g << 6) | (b));
}
function on_timer(id) {
 window.Repaint();
}
function on_playback_new_track(metadb) {
 window.Repaint();
}
function on_playback_stop(){
 window.Repaint();
}
function on_playback_seek(time){
 window.Repaint();
}
function on_playback_time(time){
 window.Repaint();
}
function on_playback_pause(state){
 window.Repaint();
}
function on_mouse_lbtn_down(x,y){
 g_drag = 1;
 on_mouse_move(x,y);
}
function on_mouse_lbtn_up(x,y){
 if(g_drag){
 g_drag = 0;
 g_drag_seek = x / window.Width;
 g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ?

g_drag_seek : 1;
 fb.PlaybackTime = fb.PlaybackLength * g_drag_seek;
 g_drag = 0;
 }
}
function on_mouse_move(x,y){
 if(g_drag){
 g_drag_seek = x / window.Width;
 g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ?

g_drag_seek : 1;
 window.Repaint();
 }
}
function RGB(r, g, b) { return (0xff000000 | (r << 16) | (g << 8) | (b)); }
function on_paint(gr) {
 var text = fb.IsPlaying ? fb.TitleFormat(tf_string).Eval() : (stopped ? "STOP" :

"----===foo-v1.3.x===----");// название сборки
 var text_width_d = gr.CalcTextWidth(text, font);
 ww = window.Width, wh = window.Height, pos = 0, length =

fb.PlaybackLength;
 if(!timer) timer = window.CreateTimerInterval(70);
 q = q + 50;
 if(length > 0){
 if(g_drag){
 pos = window.Width * g_drag_seek;
 }
 else{
 pos = window.Width * (fb.PlaybackTime /

[length]);
 }
 } else if (fb.PlaybackTime) {
 }
 gr.FillGradRect(0,0,ww,wh,-90,RGB(70,120,140), RGB(0,6,1));
 gr.FillGradRect(0, 0, pos, wh,-90,RGB(0,6,1),

RGB(70,140,120));//фон прошло
 gr.DrawRect(-1,-9, pos+1, 35, 2, RGB(199,0,190));//движок-разделитель
 text_width_2 = gr.CalcTextWidth(text, font);
 if(text_width_d>ww-15) {
 text = text + " • " + text;
 text_width_2 = gr.CalcTextWidth(text, font);
 if(pos_d <= text_width_d - text_width_2) {
 pos_d = 7 - (start ? 0 : 3);
 start = false;
 } else {
 pos_d = pos_d - 1;
 }
 gr.GdiDrawText(text, font, RGB(180,196,200), pos_d + 1, 0, text_width_2,

18, align_scroll);
 } else {
 gr.GdiDrawText(text, font, RGB(180,196,200), 1, 0, ww, 90, align_scroll);
 }
function on_size() {
if (g_timer) {window.KillTimer(g_timer); g_timer=false;}
}
function on_playback_pause(state) {
window.Repaint();
}
function on_playback_starting(cmd, is_paused) {}
}
 // APPLICATION - END
(для гармонизации сборки)
Предлагалось и хвалилось здесь :
/viewtopic.php?t=1878&start=100#p49674
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #239 Yurnikos » 23.02.2015, 23:06

seriousstas:если есть по аналогии : сикбар v.10.12.2010 и для volume
Пользую волюме такую:
Спойлер
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }

var g_font = gdi.Font("Tahoma", 12, 0);
var g_drag = 0;

function on_paint(gr){
gr.SetTextRenderingHint(5);
var ww = window.Width;
var wh = window.Height;
var volume = fb.Volume;
var pos = window.Width * ((100+volume)/100);
var txt = (Math.ceil(volume)) + "dB";
gr.FillGradRect( 0, 0, pos, wh, 90, RGB(240,240,240), RGB(100,230,100));
gr.FillGradRect(pos, 0, ww-pos, wh, 90, RGB(240,240,240), RGB(190,190,190));
gr.DrawString(txt, g_font, RGB(64,64,128), 0, 0, ww, wh, 0x11005000);
gr.DrawRect(0,0, ww-1, wh-1, 1.0, RGB(150,150,150));
}
function on_mouse_lbtn_down(x,y){
g_drag = 1;
}
function on_mouse_lbtn_up(x,y){
on_mouse_move(x,y);
g_drag = 0;
}
function on_mouse_move(x,y){
if(g_drag){
var v = x / window.Width;
v = (v<0) ? 0 : (v<1) ? v : 1;
v = -100 * (1-v);
if(fb.Volume != v)
fb.Volume = v;
}
}
function on_mouse_wheel(delta){
if(delta>0)
fb.VolumeDown();
else
fb.VolumeUp();
}
function on_volume_change(val){
window.Repaint();
}
//EOF
Это горизонтальный вариант (В вашем варианте нужно определиться с шириной и высотой, ну и другими параметрами)
и вертикальная:
Спойлер
//для вертикальной Volume Bar : MaxWidth!
//Width = Ширина !; Height = Высота !
window.MinHeight = 120
window.MaxHeight = 250;
window.MinWidth = window.MaxWidth = 32;
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }
var g_font = gdi.Font("Tahoma", 12, 0);
var g_drag = 0;

function on_paint(gr){
gr.SetTextRenderingHint(5);
var ww = window.Width;
var wh = window.Height;
var volume = fb.Volume;
var pos = window.Height * (Math.abs(volume)/100);
var txt = (Math.ceil(volume)) + "db";
// var txt = "Db";
// gr.FillGradRect(0, pos, ww, wh-pos, 0, RGB(240,240,240), RGB(100,230,100));
// gr.FillGradRect(0, 0, wh, pos, 0, RGB(240,240,240), RGB(190,190,190));
// gr.DrawString(txt, g_font, RGB(64,64,128), 0, 0, ww, wh, 0x11005000);
// gr.DrawRect(0,0, ww-1, wh-1, 1.0, RGB(150,150,150));
gr.FillGradRect(0, pos, ww, wh-pos, 260, RGB(200,40,40), RGB(100,240,100));
gr.FillGradRect(0, 0, ww, pos, 280, RGB(200,240,240), RGB(190,190,190));
gr.DrawString(txt, g_font, RGB(100,40,40), 0, 0, ww, wh, 0x11005000);
gr.DrawRect(0,0, ww-1, wh-1, 1.0, RGB(150,150,150));
}
function on_mouse_lbtn_down(x,y){
g_drag = 1;
}
function on_mouse_lbtn_up(x,y){
on_mouse_move(x,y);
g_drag = 0;
}
function on_mouse_move(x,y){
if(g_drag){
var v = (window.Height - y) / window.Height;
v = (v<0) ? 0 : (v<1) ? v : 1;
v = -100 * (1-v);
if(fb.Volume != v)
fb.Volume = v;
}
}
function on_mouse_wheel(delta){
if(delta<0)
fb.VolumeUp();
else
fb.VolumeDown();
}
function on_volume_change(val){
window.Repaint();
}
//EOF
Просьба "не пинать" за заимствования у корифееф!
Yurnikos
Гость

Сообщение #240 seriousstas » 24.02.2015, 02:03

Yurnikos
Спасибо!
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Пред.След.

Вернуться в Секреты foobar2000