Отображение нажатой кнопки автопауза

Список разделов foobar2000 Есть вопрос!

Описание: У вас проблемы с foobar2000 и вам необходима помощь? Спрашивайте здесь!
Правила раздела: Одна тема — один вопрос или группа связанных вопросов. Обязательно формируйте внятный заголовок, максимально отражающий суть. Подробно описывайте проблему. Не забывайте указать версию плеера, название сборки, по возможности добавить скриншоты проблемы.

Сообщение #1 Nikich 777 » 01.04.2015, 00:16

Здравствуйте!
Много времени мне потребовалось, чтоб освоить таки foobar, настроить его под себя. Остался один, омрачающий чувством незавершенности, штрих. Можно ли сделать средствами PSS (или любыми иными) так, чтоб нажатая кнопка автопаузы отображалась заданной мной картинкой (отличной от картинки на не нажатой кнопке), а не так, как по умолчанию? Просто на темных (да и светлых вообщем то) темах это "нажатие" не очень хорошо видно, а для меня это очень важно (для работы). Если это возможно - помогите пожалуйста!

Добавлено спустя 45 минут 43 секунды:
Вот например для кнопки Play
Код: Выделить всё
$ifequal(%User.playing%,1,
   $imagebutton(70,18,,,%User.path%Pause.png,%User.path%Pause.png,COMMAND:'Playback/Pause';REFRESH,,),
   $imagebutton(70,18,,,%User.path%Play.png,%User.path%Play.png,COMMAND:'Playback/Play';REFRESH,,))
и данная кнопка меняет картинку после нажатия. Но тут две разных команды, с командой Playback/Play or pause такое уже не прокатит вроде..
В общем как сделать такую тему с автопаузой?
Последний раз редактировалось Nikich 777 01.04.2015, 12:42, всего редактировалось 1 раз.
Nikich 777
Автор темы
Репутация: 2
С нами: 9 лет 8 месяцев

Сообщение #2 kgena_ua » 01.04.2015, 10:49

Nikich 777, можно разными способами, но я бы сделал так.
Нужна кнопка с четырьмя состояниями (четыре картинки):
pause.png;
pause_on.png;
pause_is.png;
pause_is_on.png.

далее создаем две переменные:
$puts(pause_on,%User.path%$if(%ispaused%,pause_is_on.png,pause_on.png))
$puts(pause_off,%User.path%$if(%ispaused%,pause_is.png,pause.png))

далее Ваша строка:
$imagebutton(70,18,,,$get(pause_off),$get(pause_on),COMMAND:'Playback/Pause';REFRESH,,),

Можно проще. Перед строкой $imagebutton(70,18,,,.........
добавить строку:
$if(%ispaused%,$imageabs(70,18,,,%User.path%pause_is.png,,,),)
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #3 Nikich 777 » 01.04.2015, 12:15

А с АВТОПАУЗОЙ такое прокатит? В смысле с командой Stop after current..?
Nikich 777
Автор темы
Репутация: 2
С нами: 9 лет 8 месяцев

Сообщение #4 kgena_ua » 01.04.2015, 16:20

Nikich 777, Stop after current это просто Stop, не прокатит :smile:
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #5 Nikich 777 » 01.04.2015, 16:32

Нашел!!! Спасибо форуму!
Кому интересно
Код: Выделить всё
//-----------Автопауза---------------
$set_ps_global(User.path,%ps_foobar2000_path%\Image\Light\)
$ifequal(%stopafter%,0,
$imagebutton(170,16,,,%User.path%AutoPause2.png,%User.path%AutoPause2.png,COMMAND:'Playback/Stop After Current';SETGLOBAL:stopafter:1;REFRESH,),
$imagebutton(174,21,,,%User.path%AutoPause.png,%User.path%AutoPause.png,COMMAND:'Playback/Stop After Current';SETGLOBAL:stopafter:0;REFRESH,))

Изображение

Изображение
Nikich 777
Автор темы
Репутация: 2
С нами: 9 лет 8 месяцев

Сообщение #6 master_fb2k » 01.04.2015, 22:18

Nikich 777
любопытно было бы посмотреть вашу сборку в целом
можно?
master_fb2k M
Аватара
Репутация: 23
С нами: 10 лет

Сообщение #7 Nikich 777 » 02.04.2015, 00:23

Спойлер
Да как бы секрета нет, только во первых она еще не допилина, во вторых делаю ее для работы (музыкант в ресторане, на банкетах), поэтому только самое необходимое (от "кучи всего" отказался волевым усилием, хотя от пары "игрушек" типа формы волны и спектро анализатора не смог удержаться, но вынес их в отдельные окна. Если надо будет посмотреть - то чтоб не ломать глаза).
Делаю себе на замену iTunes, ну и по его (удобному для меня) формфактору в общем..
А так собственно сам проигрыватель на фото постом выше, к нему открывается плейлист (хотя пока не решил что лучше: скрывать плейлист или открывать его вместе с плеером на весь экран) и остальные окна по вызову.
Внешность немного раскрасил чтоб уж совсем не выглядел унылым, так для души. Просто в процессе работы мне нужен только минимум самой необходимой информации перед глазами, ну и самые важные моменты требующие внимания (типа автопаузы или повтора) выделяютя красным, чтоб привлечь внимание что включено. Кой чего еще надо переделать/доделать малость (спецом еще место под кнопку осталось)..
Вообщем суровый минимум для трудовых будней.
Изображение
Изображение
Nikich 777
Автор темы
Репутация: 2
С нами: 9 лет 8 месяцев

Сообщение #8 master_fb2k » 02.04.2015, 09:48

Nikich 777:музыкант в ресторане, на банкетах
спасибо, я сразу всё понял
загляни ко мне под аватарку :wink:
master_fb2k M
Аватара
Репутация: 23
С нами: 10 лет

Сообщение #9 delta22 » 26.01.2017, 11:16

Вот это куда конкретно пихать, ребят?
Код: Выделить всё
//-----------Автопауза---------------
$set_ps_global(User.path,%ps_foobar2000_path%\Image\Light\)
$ifequal(%stopafter%,0,
$imagebutton(170,16,,,%User.path%AutoPause2.png,%User.path%AutoPause2.png,COMMAND:'Playback/Stop After Current';SETGLOBAL:stopafter:1;REFRESH,),
$imagebutton(174,21,,,%User.path%AutoPause.png,%User.path%AutoPause.png,COMMAND:'Playback/Stop After Current';SETGLOBAL:stopafter:0;REFRESH,))
delta22
Репутация: 0
С нами: 8 лет 10 месяцев

Сообщение #10 kgena_ua » 26.01.2017, 11:36

delta22, это для PSS.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #11 vladj » 26.01.2017, 11:53

Тут речь идет о конкретной сборке, ясно что у тебя картинки с кнопками лежат в другой папке,
поэтому указываем в строке (User.path,%ps_foobar2000_path%\Image\Light\) свои папки заменив
название папок (тут мы имеем \Image\Light\) на свои пути к папкам с кнопками.
Далее смотря на то, на чем заделаны кнопки...тебе нужно найти скрипт, который их выводит.
Это может быть в разделителе PSS или отдельный скрипт.
Если сборка на PSS идешь в настройки, Columns U1 > Layout (в русифицированной - Стиль) и там по порядку
выделяешь Panel Stack Splitter, справа Configure... (в русифицированной - настроить...), в вышедшем оконце
Script и в скрипте ищещь строчки, которые выводят кнопки, похожие на...
$imagebutton(170,16,,,%User.path%AutoPause2.png,%User.path%AutoPause2.png
Тут у нас говорится, что это картинка кнопки, расположение ее слева и сверху, то какая выводится при
нажатой-не нажатой, т.е. меняешь еще и названия на названия своих кнопок, положение их на то, где
они у тебя выводятся и т.д. Довольно сложно, но зачатки я тебе дал, остальное методом проб и ошибок.
Скопируй свою сборку в другое место и на скопированной тренируйся, пробуй.
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 10 месяцев

Сообщение #12 delta22 » 26.01.2017, 13:13

Panel Stack Splitter, справа Configure... (в русифицированной - настроить...), в вышедшем оконце
Script и в скрипте ищещь строчки, которые выводят кнопки...
Вот тут у меня в скриптах пусто!
В сплитере стоят кнопки, громкость, меню..
Изображение.
Короче, если я правильно понял, я использую стандартные кнопки, а мне надо WSH кнопки, что-бы реализовать фичу как у топик-стартера, да?
Тогда дайте пожалуйста мне полный скрипт кнопок!
delta22
Репутация: 0
С нами: 8 лет 10 месяцев

Сообщение #13 vladj » 26.01.2017, 18:11

Тебе проще выбрать и скачать нормальную сборку....А то тебе дать скрипт на кнопки, потом
попросишь сами кнопки, потом запросишь помощи в том как и куда WSH панель под них установить-настроить.
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 10 месяцев

Сообщение #14 delta22 » 27.01.2017, 06:19

Vladj, да я алень в програмизмах, но не алень-алень :) Помогите запилить скрипт на 4 кнопки (переключатель) с отображением какая сейчас нажата. Надо переключать пресеты ДСП и видеть какой из них сейчас работает. Только скрипт, дальше сам! :)
Нашел скрипт от комрада maklaud
Код: Выделить всё
// ==PREPROCESSOR==
// @name "Pulsar Buttons"
// ==/PREPROCESSOR==

var BackColor = 0xff202020;
var FP = fb.FoobarPath + "themes\\Pulsar Buttons\\";
var P = {
    STOP:gdi.Image(FP+"stop.png"),
    PREV:gdi.Image(FP+"prev.png"),
    NEXT:gdi.Image(FP+"next.png"),
    PLAY:gdi.Image(FP+"play.png"),
    PAUS:gdi.Image(FP+"pause.png")};
var BT = 6;             //всего позиций кнопок
var FT = 9;             //всего кадров в пикче
var IW = 60;            //ширена пикчи
var IH = 540;           //высота пикчи
var FPS = 30;           //скорость анимации (кадров/сек)
var FH = IH/FT;         //высота кадра в пикче
var TimBefSeek = 400;   //пройдёт перед перемоткой, мс.
var IntSeek = 200;      //время интервала перемотки, мс.
var TimSeek = 5;        //перемотать на, сек.
var N = {STOP:2, PREV:3, PLAY:4, PAUS:4, NEXT:5}; //порядок кнопок (№ п/п)
var f = {STOP:1, PREV:1, PLAY:1, PAUS:1, NEXT:1}; //стартовый кадр
var m = {};
var b = {};
var FrameIntrvl = window.setInterval(Frame, 1000/FPS), BackAheaInt, PrevNextTmt;
var repaint = 0;

function on_paint(gr) {
    gr.FillSolidRect(0, 0, ww, wh, BackColor);
    gr.DrawImage(P.STOP, NTP(N.STOP), 0, wh, wh, 0, FTP(f.STOP), IW, FH);
    gr.DrawImage(P.PREV, NTP(N.PREV), 0, wh, wh, 0, FTP(f.PREV), IW, FH);
    gr.DrawImage(P.NEXT, NTP(N.NEXT), 0, wh, wh, 0, FTP(f.NEXT), IW, FH);
    if (fb.IsPaused || !fb.IsPlaying) {
        gr.DrawImage(P.PLAY, NTP(N.PLAY), 0, wh, wh, 0, FTP(f.PLAY), IW, FH);
    } else {
        gr.DrawImage(P.PAUS, NTP(N.PAUS), 0, wh, wh, 0, FTP(f.PAUS), IW, FH);
    }
}

function on_mouse_move(x,y) {
    onY= y<wh&&y>0 ? 1 : 0;
    m.STOP = x > NTP(N.STOP) && x < NTP(N.STOP)+wh && onY ? 1 : 0;
    m.PREV = x > NTP(N.PREV) && x < NTP(N.PREV)+wh && onY ? 1 : 0;
    m.NEXT = x > NTP(N.NEXT) && x < NTP(N.NEXT)+wh && onY ? 1 : 0;
    if (fb.IsPaused || !fb.IsPlaying) {
        m.PLAY = x > NTP(N.PLAY) && x < NTP(N.PLAY)+wh && onY ? 1 : 0;
        m.PAUS = 0;
    } else {
        m.PAUS = x > NTP(N.PAUS) && x < NTP(N.PAUS)+wh && onY ? 1 : 0;
        m.PLAY = 0;
    }
}

function on_mouse_leave() {m = {STOP:0, PREV:0, PLAY:0, PAUS:0, NEXT:0};}

function on_mouse_lbtn_down(x,y) {
    b = {STOP:m.STOP, PREV:m.PREV, PLAY:m.PLAY, PAUS:m.PAUS, NEXT:m.NEXT};
    if (b.PREV||b.NEXT) {PrevNextTmt = window.SetTimeout(PrevNextAbort, TimBefSeek)}
}

function PrevNextAbort() {
    b = {PREV:0, NEXT:0};
    BackAheaInt = window.SetInterval(function Back() {
        if (m.PREV) {fb.PlaybackTime -= TimSeek};
        if (m.NEXT) {fb.PlaybackTime += TimSeek};
    }, IntSeek);
}

function on_mouse_lbtn_up() {
    window.ClearInterval(BackAheaInt);
    window.ClearTimeout(PrevNextTmt);
    if (b.STOP && m.STOP) {fb.Stop()};
    if (b.PREV && m.PREV) {fb.Prev()};
    if (b.NEXT && m.NEXT) {fb.Next()};
    if (b.PLAY && m.PLAY || b.PAUS && m.PAUS) {fb.PlayOrPause()};
    b = {STOP:0, PREV:0, PLAY:0, PAUS:0, NEXT:0};
}

function Frame() {
    f.STOP = CalcFrame(m.STOP, b.STOP, f.STOP);
    f.PREV = CalcFrame(m.PREV, b.PREV, f.PREV);
    f.NEXT = CalcFrame(m.NEXT, b.NEXT, f.NEXT);
    f.PLAY = CalcFrame(m.PLAY, b.PLAY, f.PLAY);
    f.PAUS = CalcFrame(m.PAUS, b.PAUS, f.PAUS);
    if (repaint){window.Repaint();}
    repaint= f.STOP!=1||f.PREV!=1||f.NEXT!=1||f.PLAY!=1||f.PAUS!=1 ? 1 : 0;
}

function CalcFrame(m,b,f) {return m?b?FT:f<FT-1?f+1:FT-1:f<=1?1:f<FT&&f>7?f-3:f-1;}

function NTP(n) {return n*(ww/(BT+1))-wh/2;}

function FTP(f) {return (f-1)*FH;}

function on_colors_changed() {window.Repaint();}

function on_size() {
    ww = window.Width;
    wh = window.Height;
}
Как его поправить, что-бы при нажатии определенной кнопки она оставалась подсвеченной или даже мигала?
delta22
Репутация: 0
С нами: 8 лет 10 месяцев


Вернуться в Есть вопрос!