Скрипты для foo_uie_wsh_panel_mod

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

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

Сообщение #2901 clip » 25.09.2021, 18:48

kgena_ua:1. Скрипт для старой версии, некоторые функции уже не используются, кое-что надо исправлять - менять, чтобы хотя-бы запустить его на последней версии WSH.
Я специально отправил базовый вариант - для чистоты эксперимента , а запустить не проблема - основное меню отключить, таймеры отключить или поправить и решить с function on_item_focus_change(), да а с путями там все готово :smile:
kgena_ua:2. Скрипт отображает встроенные обложки. Зачем париться. Не проще воспользоваться моим скриптом "Get covers".
Эта панель у меня лет 10 - можно сказать, что она центральная. По повду Get covers - у меня их сейчас уже 2 стоит (пробовал и вашу), а возможности данной панели уходят далеко за пределы "Cover Panel" и показ кроме встроенных обложек - техника настройки (если хватит знаний) :wink:
clip
Репутация: 0
С нами: 3 года 1 месяц

Сообщение #2902 Cerberus » 27.09.2021, 22:14

kgena_ua:Посмотрю панель "свойства"
Посмотрите, пожалуйста! Полезная штука, но ее почему то то нет в новой сборке Lur

Добавлено спустя 52 секунды:
kgena_ua:По Get Covers (Artwork) radio logos. У меня только последняя версия. Для Spider Monkey Panel.
covers 22092021.rar
Подскажите как внедрить скрипт для Spider Monkey Panel :)
Cerberus
Репутация: 10
С нами: 7 лет 5 месяцев

Сообщение #2903 kgena_ua » 28.09.2021, 11:05

Cerberus:как внедрить скрипт для Spider Monkey Panel
Устанавливаете панель.
Один из способов:
- правой клавишей - Configure;
- выбираем "file";
- выбираем сам файл со скриптом;
- нажимаем "Ok".

Безымянный.png
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #2904 InFive » 28.09.2021, 18:21

после запуска foobar и запуска песни, панель выглядит вот так
01.png


если свернуть/развернуть foobar, то становится вот так, как и должно
02.png


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

помогите, пожалуйста...

вот код скрипта
Спойлер
// Used in window.GetColorDUI()
var ColorTypeDUI = {
text: 0,
background: 1,
highlight: 2,
selection: 3
};

var DT_CENTER = 0x00000001;
var DT_NOPREFIX = 0x00000800;
var g_syscolor = 0;

function get_colors() {
g_textcolor_sel = window.GetColorDUI(ColorTypeDUI.selection);
g_textcolor = window.GetColorDUI(ColorTypeDUI.text);
g_textcolor_hl = window.GetColorDUI(ColorTypeDUI.highlight);
g_backcolor = window.GetColorDUI(ColorTypeDUI.background);
g_syscolor = utils.GetSysColor(15);

}
get_colors();

function FormatTimeLong(duration) {
var rs = duration.toString();
switch (rs.length) {
case 4:
rs = "00:0" + rs;
break;
case 5:
rs = "00:" + rs;
break;
case 7:
rs = "0" + rs;
break;
}
return rs;
}

function PrefixTimeLong(duration) {
var rs = duration.toString();
switch (rs.length) {
case 4:
rs = "00:0";
break;
case 5:
rs = "00:";
break;
case 7:
rs = "0";
break;
}
return rs;
}

//Time formatting secondes -> 0:00
function TimeFmt(t){
var zpad = function(n){
var str = n.toString();
return (str.length<2) ? "0"+str : str;
}
var h = Math.floor(t/3600); t-=h*3600;
var m = Math.floor(t/60); t-=m*60;
var s = Math.floor(t);
if(h>0) return h.toString()+":"+zpad(m)+":"+zpad(s);
return m.toString()+":"+zpad(s);
}

//Text formatting function
function StringFormat() {
var h_align = 0,
v_align = 0,
trimming = 0,
flags = 0;
switch (arguments.length) {
// fall-thru
case 4:
flags = arguments[3];
case 3:
trimming = arguments[2];
case 2:
v_align = arguments[1];
case 1:
h_align = arguments[0];
break;
default:
return 0;
}
return ((h_align << 28) | (v_align << 24) | (trimming << 20) | flags);
}

StringAlignment = {
Near: 0,
Centre: 1,
Far: 2
};

var l_stringformat = StringFormat(StringAlignment.Near, StringAlignment.Centre);
var c_stringformat = StringFormat(StringAlignment.Centre, StringAlignment.Centre);
var r_stringformat = StringFormat(StringAlignment.Far, StringAlignment.Centre);

// -------------------------- //


var len = fb.TitleFormat("%length%");
var elap = fb.TitleFormat("%playback_time%");
var elap_seconds = 0;
var remain = fb.TitleFormat("%playback_time_remaining%");
var len_seconds = 0;
var g_timer;
var refresh_timer=500;

// -------------------------- //

var ww;
var wh;

var pad_x=5;

var font1 = gdi.Font("alarm clock", 21, 0);//"Logostile", 18, 0
var font2 = gdi.Font("lucida console", 12, 0);
var tf_colour = g_backcolor ;
var pointille_colour = g_backcolor ;

var tf_playbacktime;
var tf_playbacktime_remaining;
var tf_length;

var tf_titles;
var tf_codec;
var tf_bitrate;
var tf_samplerate;
var tf_channels;
var tf_info;

// colors (screen infos)
var techinfo_color = g_syscolor;
var techinfobox_color_dark = g_textcolor&0xfacccccc;

function on_size() {
window.MinHeight = window.MaxHeight = 50;
ww = window.Width;
wh = 21;
refresh_timer = (fb.PlaybackLength>0)?(Math.floor(len_seconds/60)*25):50;
if (refresh_timer<20) refresh_timer=20;
refresh_timer=500;
refresh_TF_info();
}

function on_paint(gr) {
var i;
var box_width;

// background
gr.FillSolidRect(0, 0, ww, wh, g_syscolor);
// Track Info
gr.SetTextRenderingHint(5);

gr.GdiDrawText(FormatTimeLong(tf_playbacktime), font1, tf_colour, 5, 0, ww-10, wh, 0x00000000 | DT_NOPREFIX);//левый таймер
gr.GdiDrawText(FormatTimeLong(tf_length), font1, tf_colour, 5, 0, ww-11, wh, 0x00000002 | DT_NOPREFIX);// правый

// tech info at bottom
gr.SetSmoothingMode(2);
if (fb.IsPlaying || fb.IsPaused) {

gr.FillSolidRect(10, 20, ww-180, wh, g_syscolor);

box_width = (ww-pad_x*2-180) / 4;
gr.FillRoundRect(91+pad_x-0+(0*box_width), wh-20, box_width-5, 20, 3, 3, techinfobox_color_dark);
gr.GdiDrawText(tf_codec, font2, techinfo_color, Math.round(91+pad_x+(0*box_width)), wh-16, box_width-3, 14, DT_CENTER);

gr.FillRoundRect(91+pad_x-0+(1*box_width), wh-20, box_width-5, 20, 3, 3, techinfobox_color_dark);
gr.GdiDrawText(tf_bitrate, font2, techinfo_color, Math.round(91+pad_x+(1*box_width)), wh-16, box_width-3, 14, DT_CENTER);

gr.FillRoundRect(91+pad_x-0+(2*box_width), wh-20, box_width-5, 20, 3, 3, techinfobox_color_dark);
gr.GdiDrawText(tf_samplerate, font2, techinfo_color, Math.round(91+pad_x+(2*box_width)), wh-16, box_width-3, 14, DT_CENTER);

gr.FillRoundRect(91+pad_x-0+(3*box_width), wh-20, box_width-5, 20, 3, 3, techinfobox_color_dark);
gr.GdiDrawText(tf_channels, font2, techinfo_color, Math.round(91+pad_x+(3*box_width)), wh-16, box_width-3, 14, DT_CENTER);

gr.FillRoundRect(1+pad_x-0+(0*box_width), wh+4, box_width+768, 20, 3, 3, techinfobox_color_dark);
gr.GdiDrawText(tf_titles, font2, techinfo_color, Math.round(0+pad_x+(0*box_width)), wh+9, box_width+768, 14, DT_CENTER);
}
gr.SetSmoothingMode(0);

}

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

// ==============================================================/ Playback Stop
function on_playback_stop(reason)
{
if(reason==0) // Stop
{
percent=0;
if(g_timer){
window.KillTimer(g_timer);
}
refresh_TF_info();
window.Repaint();
}
}

// ==============================================================/ Playback Pause
function on_playback_pause(state)
{
window.Repaint();
}

// ==============================================================/ Playback Time
function on_playback_time(time) {
refresh_TF_info();
window.RepaintRect(0, 0, 100, 20);//();Rect(91+pad_x, 0, ww-pad_x*2, 20);
}

// ==============================================================/ New Track
function on_playback_new_track(info) {
refresh_TF_info();

refresh_timer=Math.floor(len_seconds/60)*25;
if (refresh_timer<50) refresh_timer=50;
refresh_timer=500;
//if(fb.PlaybackLength>0) g_timer = window.CreateTimerInterval(refresh_timer);
//window.Repaint();
CollectGarbage();
}

function refresh_TF_info() {

tf_playbacktime = "";
if(fb.IsPlaying || fb.IsPaused)
{
tf_playbacktime = fb.TitleFormat("$if2(%playback_time%,0:00)").Eval(true);
elap_seconds = fb.TitleFormat("%playback_time_seconds%").Eval(true);
} else {
tf_playbacktime = fb.TitleFormat("$if2(%playback_time%,0:00)").Eval(true);
elap_seconds = fb.TitleFormat("%playback_time_seconds%").Eval(true);
}
if(fb.PlaybackLength>0)
{
tf_playbacktime_remaining = fb.TitleFormat("$if2(%playback_time_remaining%,0:00)").Eval(true);
tf_length = fb.TitleFormat("$if2(%length%,0:00)").Eval(true);
len_seconds = fb.Titleformat("%length_seconds%").Eval(true);
tf_codec = fb.TitleFormat("%__codec%").Eval(true);
tf_bitrate = fb.TitleFormat("$if(%__bitrate_dynamic%,$if(%_isplaying%,$select($add($mod(%_time_elapsed_seconds%,2),1),%__bitrate_dynamic%,%__bitrate_dynamic%),%__bitrate_dynamic%),%__bitrate%)' Kb/s'").Eval(true);
tf_samplerate = fb.TitleFormat("%__samplerate%' Hz'").Eval(true);
tf_titles = fb.TitleFormat("%title% '/' %artist% '/' %album% '//' %composer%").Eval(true);
tf_channels = fb.TitleFormat("$if($stricmp($codec(),MP3),$get(space2)$caps(%__mp3_stereo_mode%),$if(%__channels%,$ifgreater(%__channels%,1,Stereo,Mono),$if($strcmp(%__channels%,4),4 Ch,$sub(%__channels%,1)'.1' Ch)))").Eval(true)

} else {
tf_playbacktime_remaining = fb.TitleFormat("$if2(%playback_time_remaining%,0:00)").Eval(true);
tf_length = fb.TitleFormat("$if2(%length%,0:00)").Eval(true);
len_seconds = fb.Titleformat("%length_seconds%").Eval(true);
tf_codec = fb.TitleFormat("%__codec%").Eval(true);
tf_bitrate = fb.TitleFormat("$if(%__bitrate_dynamic%,$if(%_isplaying%,$select($add($mod(%_time_elapsed_seconds%,2),1),%__bitrate_dynamic%,%__bitrate_dynamic%),%__bitrate_dynamic%),%__bitrate%)' Kb/s'").Eval(true);
tf_samplerate = fb.TitleFormat("%__samplerate%' Hz'").Eval(true);
tf_titles = fb.TitleFormat("%title%").Eval(true);
tf_channels = fb.TitleFormat("$if($stricmp($codec(),MP3),$get(space2)$caps(%__mp3_stereo_mode%),$if(%__channels%,$ifgreater(%__channels%,1,Stereo,Mono),$if($strcmp(%__channels%,4),4 Ch,$sub(%__channels%,1)'.1' Ch)))").Eval(true)
len_seconds = 0;
}
}

function on_playback_dynamic_info() {
tf_bitrate = fb.TitleFormat("$if(%__bitrate_dynamic%,$if(%_isplaying%,$select($add($mod(%_time_elapsed_seconds%,2),1),%__bitrate_dynamic%,%__bitrate_dynamic%),%__bitrate_dynamic%),%__bitrate%)' Kb/s'").Eval(true);
window.RepaintRect(pad_x,wh-18,ww-pad_x*2,30);
}

function on_mouse_lbtn_dblclk(x,y) {
fb.RunMainMenuCommand('View/Show now playing in playlist');
}
InFive
Репутация: 2
С нами: 8 лет 3 месяца

Сообщение #2905 Cerberus » 28.09.2021, 20:03

kgena_ua:Один из способов:
эта панель мне не знакома я попытался. она вроде установилась, но закрывает собой все элементы. подскажите где указать ей размер?
раньше ставил панели через окошко на скрине. а с Spider Monkey еще не разобрался!
Вложения
111111.PNG
Последний раз редактировалось Cerberus 28.09.2021, 20:39, всего редактировалось 1 раз.
Cerberus
Репутация: 10
С нами: 7 лет 5 месяцев

Сообщение #2906 kgena_ua » 28.09.2021, 20:13

InFive:и после смены треков название песен не обновляется
надо добавить window.Repaint(); в конец функции refresh_TF_info().

Можно заменить все window.RepaintRect на window.Repaint();

Убрать все строки, содержащие слово "...timer". Не понятно, зачем они нужны.

Можно заменить
Код: Выделить всё
tf_titles = fb.TitleFormat("%title% '/' %artist% '/' %album% '//' %composer%").Eval(true);
на
Код: Выделить всё
tf_titles = fb.TitleFormat("[%title%] [/ %artist%] [/ %album%] [/ %composer%]").Eval(true);
уберутся ??? при пустых значениях.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #2907 InFive » 28.09.2021, 20:54

kgena_ua:Можно заменить все window.RepaintRect на window.Repaint();
оказалось, что добавка в функцию и убрать таймеры, этого мало, надо именно еще заменить и это было, вот тогда все заработало, как надо.
теперь все обновляется, даже инфа с радио и с ютуба.

Спасибище за помощь!
InFive
Репутация: 2
С нами: 8 лет 3 месяца

Сообщение #2908 Cerberus » 29.09.2021, 23:43

kgena_ua:Один из способов:

Cerberus:эта панель мне не знакома я попытался. она вроде установилась, но закрывает собой все элементы. подскажите где указать ей размер?
раньше ставил панели через окошко на скрине. а с Spider Monkey еще не разобрался!

Подскажите, пожалуйста как до ума довести!
Вложения
111111.PNG
Cerberus
Репутация: 10
С нами: 7 лет 5 месяцев

Сообщение #2909 aliss » 01.10.2021, 13:13

Уважаемые форумчане! Есть ли возможность написать скрипт с выводом информации об общем времени воспроизведения?
Снимок экрана 2021-10-01 121052.jpg
aliss
Репутация: 0
С нами: 2 года 6 месяцев

Сообщение #2910 SergPuh.68 » 01.10.2021, 23:01

Привет.Сделал так что бы панели скрывались во время изменения размера окна плеера,а вот что бы они появлялись после отпускания мышки не получается.Как нужно правильно прописать?
Код: Выделить всё
function on_size() {
    ww = window.Width;
    wh = window.Height;
   do_layout();
}

function do_layout() {
   Art.Move(10, 56, ww/2-20, wh-128);
   Top.Move(0, 0, ww, 56);
   Bottom.Move(0, wh - 72, ww, 72);
   Playlist.Move(ww/2, 56, ww/2, wh-128);
   Playlist.TopMost = true;
   
   Art.Show(false);
   Top.Show(false);
   Bottom.Show(false);
   Playlist.Show(false);
}
SergPuh.68 M В сети
Аватара
Откуда: Украина
Репутация: 142
С нами: 5 лет 2 месяца

Сообщение #2911 seriousstas » 05.10.2021, 03:59

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

Создай таймер , сунь его в on_size, и по истечению пропиши панели, которые должны появиться.
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #2912 SergPuh.68 » 05.10.2021, 12:51

Уже два дня пытаюсь так сделать,пока не получается.

Добавлено спустя 4 часа 6 минут:
seriousstas, спасибо, :clap: получилось.

Добавлено спустя 6 минут 23 секунды:
Код: Выделить всё
function on_size() {
    ww = window.Width;
    wh = window.Height;
   
    do_layout();

   Playlist.Show(false);
   Art.Show(false);
   Top.Show(false);
   Bottom.Show(false);

window.SetTimeout(on_timer, 1000);

function on_timer() {
   Playlist.Show();
   Art.Show();
   Top.Show();
   Bottom.Show();   
  }
}

function do_layout() {   
   Art.Move(10, 56, ww/2-20, wh-128);
   Top.Move(0, 0, ww, 56);      
   Playlist.Move(ww/2, 56, ww/2, wh-128);
   Bottom.Move(0, wh - 72, ww, 72);
}
SergPuh.68 M В сети
Аватара
Откуда: Украина
Репутация: 142
С нами: 5 лет 2 месяца

Сообщение #2913 seriousstas » 07.10.2021, 00:44

пока не получается
Код: Выделить всё
function on_size() {
    ww = window.Width;
    wh = window.Height;
   
   Playlist.Show(false);
   Art.Show(false);
   Top.Show(false);
   Bottom.Show(false);
window.SetTimeout(on_timer, 200);
}
function on_timer() {
do_layout(); 
  }
function do_layout() {   
   Art.Move(10, 56, ww/2-20, wh-128);
   Top.Move(0, 0, ww, 56);     
   Playlist.Move(ww/2, 56, ww/2, wh-128);
   Bottom.Move(0, wh - 72, ww, 72);
}
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #2914 SergPuh.68 » 07.10.2021, 09:02

seriousstas, так панели изначально скрыты и таймер не срабатывает :fie:
В идеале конечно бы привязать шоу панелей к отжиму лкм мышки при изменении размеров окна.Но это не срабатывает потому что в этот момент курсор находится вне окна.
SergPuh.68 M В сети
Аватара
Откуда: Украина
Репутация: 142
С нами: 5 лет 2 месяца

Сообщение #2915 seriousstas » 08.10.2021, 01:39

SergPuh.68
так панели изначально скрыты и таймер не срабатывает
Сложно сказать не имея теста , вот (ниже пример) попробовал на сборке LUR , тк моя сборка так и осталась на МПС и там так-же это реализовано.
На видео подложка с большим разрешением 3000+ пикселей..Часто суют такое..)
и utils.GetAlbumArtV2() с таким не справляется. Плеер превращается в "черепаху" :spy: при ресайзе окна..
На такие случаи прикрутить отложенный запуск GetAlbumArt и панелей по таймеру полезно на мой взгляд.
Справа плеер с правками в он_сaйз (позакрывал все панели.. )
phpBB [media]

Попробуй сделать по аналогии. У LUR код хорошо читается..
Если интересен основной код с этим таймером foobar_lur_210920 - заверну.
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #2916 SergPuh.68 » 08.10.2021, 08:53

seriousstas:Сложно сказать не имея теста
Согласен.
Вообще полезная штука.У меня всё получилось,я же писал.Единственное попробуйте делать ресайз например две секунды и быстро(на таймере установлена одна секунда) тогда панели начинают "дискотеку".Таймер срабатывает через секунду и начинаются непонятки,блымание,мигание.
seriousstas:Если интересен основной код
Конечно интересен :smile:
SergPuh.68 M В сети
Аватара
Откуда: Украина
Репутация: 142
С нами: 5 лет 2 месяца

Сообщение #2917 seriousstas » 08.10.2021, 09:33

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

Сообщение #2918 SergPuh.68 » 08.10.2021, 09:53

seriousstas:Пока размер изменяется, таймер перезапускается ..
Это я и пытаюсь реализовать.К сожалению пока не могу выложить сборку с исходным кодом,потому что сейчас большие проблемы с youtube-dl.exe а у меня основано всё на Youtube Source и MPV.
SergPuh.68 M В сети
Аватара
Откуда: Украина
Репутация: 142
С нами: 5 лет 2 месяца

Сообщение #2919 seriousstas » 08.10.2021, 22:47

Это я и пытаюсь реализовать.
Обнулить таймер можно : window.ClearTimeout(on_timer);
Для сравнения удобен Araxis Merge
Управляющий главный скрипт из последней сборки LUR :
Спойлер
Код: Выделить всё
var ColourTypeCUI = {
    text: 0,
    selection_text: 1,
    inactive_selection_text: 2,
    background: 3,
    selection_background: 4,
    inactive_selection_background: 5,
    active_item_frame: 6
};
var ColourTypeDUI = {
    text: 0,
    background: 1,
    highlight: 2,
    selection: 3
};
var _scale = window.GetProperty("_scale", 1);
var _alpha = window.GetProperty("_alpha", 40);
var chsz = true;
var _bgColor = window.InstanceType == 0 ? window.GetColourCUI(ColourTypeCUI.background) : window.GetColourDUI(ColourTypeDUI.background);
var _tp = fb.ProfilePath + (_bgColor == 0xFFFFFFFF ? "themes\\lur\\white\\" : "themes\\lur\\black\\");
var _ww = 0, _wh = 0;
var _mainViewWidth = 0;
var _sidebarWidth = window.GetProperty("Sidebar width", 320 * _scale);
var _lyricsArtHeight = window.GetProperty("Lyrics art height", 150 * _scale);
var _newMainViewWidth, _newSidebarWidth, _newLyricsArtHeight;
var _cover_image = null;

window.HandOnButtons = true;

var ButtonStop = window.CreateButton(7 * _scale, 18 * _scale, _tp+"stop.png", _tp+"stop_over.png");
ButtonStop.Width *= _scale;
ButtonStop.Height *= _scale;
var ButtonPrev = window.CreateButton(46 * _scale, 18 * _scale, _tp+"prev.png", _tp+"prev_over.png");
ButtonPrev.Width *= _scale;
ButtonPrev.Height *= _scale;
var ButtonPlay = window.CreateButton(83 * _scale, 15 * _scale, [_tp+"play.png", _tp+"pause.png"], [_tp+"play_over.png", _tp+"pause_over.png"]);
ButtonPlay.Width *= _scale;
ButtonPlay.Height *= _scale;
var ButtonNext = window.CreateButton(126 * _scale, 18 * _scale, _tp+"next.png", _tp+"next_over.png");
ButtonNext.Width *= _scale;
ButtonNext.Height *= _scale;
var ButtonOpen = window.CreateButton(165 * _scale, 18 * _scale, _tp+"open.png", _tp+"open_over.png");
ButtonOpen.Width *= _scale;
ButtonOpen.Height *= _scale;
var ButtonRepeat = window.CreateButton(207 * _scale, 16 * _scale, [_tp+"repeat.png", _tp+"repeat_all.png", _tp+"repeat_one.png"], null);
ButtonRepeat.Width *= _scale;
ButtonRepeat.Height *= _scale;
var ButtonShuffle = window.CreateButton(207 * _scale, 34 * _scale, [_tp+"shuffle.png", _tp+"shuffle_on.png"], null);
ButtonShuffle.Width *= _scale;
ButtonShuffle.Height *= _scale;
var ButtonSeekbar = window.CreateButton(0, 0, [_tp+"switch_wave.png", _tp+"switch_vu.png", _tp+"switch_simple.png", _tp+"switch_spectrum.png"], [_tp+"switch_wave_over.png", _tp+"switch_vu_over.png", _tp+"switch_simple_over.png", _tp+"switch_spectrum_over.png"]);
ButtonSeekbar.Width *= _scale;
ButtonSeekbar.Height *= _scale;
var ButtonPlaylist = window.CreateButton(0, 0, [_tp+"plain.png", _tp+"plain_on.png"], _tp+"plain_on.png");
ButtonPlaylist.Width *= _scale;
ButtonPlaylist.Height *= _scale;
var ButtonLibPlaylist = window.CreateButton(0, 0, [_tp+"cd.png", _tp+"cd_on.png"], _tp+"cd_on.png");
ButtonLibPlaylist.Width *= _scale;
ButtonLibPlaylist.Height *= _scale;
var ButtonShpeck = window.CreateButton(0, 0, [_tp+"vis.png", _tp+"vis_on.png"], _tp+"vis_on.png");
ButtonShpeck.Width *= _scale;
ButtonShpeck.Height *= _scale;
var ButtonNowPlaying = window.CreateButton(0, 0, _tp+"now_playing.png", _tp+"now_playing_over.png");
ButtonNowPlaying.Width *= _scale;
ButtonNowPlaying.Height *= _scale;
var ButtonMiniPlayer = window.CreateButton(0, 0, [_tp+"mini.png", _tp+"mini_on.png"], _tp+"mini_on.png");
ButtonMiniPlayer.Width *= _scale;
ButtonMiniPlayer.Height *= _scale;
var ButtonPlorg = window.CreateButton(0, 0, [_tp+"plain.png", _tp+"plain_on.png"], _tp+"plain_on.png");
ButtonPlorg.Width *= _scale;
ButtonPlorg.Height *= _scale;
var ButtonLibrary = window.CreateButton(0, 0, [_tp+"library.png", _tp+"library_on.png"], _tp+"library_on.png");
ButtonLibrary.Width *= _scale;
ButtonLibrary.Height *= _scale;
var ButtonInfo = window.CreateButton(0, 0, [_tp+"info.png", _tp+"info_on.png"], _tp+"info_on.png");
ButtonInfo.Width *= _scale;
ButtonInfo.Height *= _scale;
var ButtonBio = window.CreateButton(0, 0, [_tp+"bio.png", _tp+"bio_on.png"], _tp+"bio_on.png");
ButtonBio.Width *= _scale;
ButtonBio.Height *= _scale;
var ButtonLyrics = window.CreateButton(0, 0, [_tp+"lyrics.png", _tp+"lyrics_on.png"], _tp+"lyrics_on.png");
ButtonLyrics.Width *= _scale;
ButtonLyrics.Height *= _scale;
//var ButtonVideo = window.CreateButton(0, 0, [_tp+"video.png", _tp+"video_on.png"], _tp+"video_on.png");
//ButtonVideo.Width *= _scale;
//ButtonVideo.Height *= _scale;
var ButtonPreferences = window.CreateButton(0, 0, _tp+"prefs.png", _tp+"prefs_over.png");
ButtonPreferences.Width *= _scale;
ButtonPreferences.Height *= _scale;

window.RadioButtons([ButtonPlaylist, ButtonLibPlaylist, ButtonShpeck]);
window.RadioButtons([ButtonPlorg, ButtonLibrary, ButtonInfo, ButtonBio, ButtonLyrics]);//, ButtonVideo]);

var SeekbarMode = {
   Spectrum: 0,
   Waveform: 1,
    VUMeter: 2,
     Simple: 3   
};
ButtonSeekbar.State = window.GetProperty("Seekbar mode", SeekbarMode.Spectrum);

var ViewMode = {
      Playlist: 0,
   LibPlaylist: 1,
        Shpeck: 2
};
switch(window.GetProperty("View mode", ViewMode.Playlist))
{
case ViewMode.Playlist:
    ButtonPlaylist.State = 1;
    break;
case ViewMode.LibPlaylist:
    ButtonLibPlaylist.State = 1;
    break;
case ViewMode.Shpeck:
    ButtonShpeck.State = 1;
    break;
default:
    break;
}

var SidebarView = {
   Plorg: 0,
   Library: 1,
   Info: 2,
   Bio: 3,
   Lyrics: 4
   //Video: 5
};
switch(window.GetProperty("Sidebar view", SidebarView.Plorg))
{
case SidebarView.Plorg:
    ButtonPlorg.State = 1;
    break;
case SidebarView.Library:
    ButtonLibrary.State = 1;
    break;
case SidebarView.Info:
    ButtonInfo.State = 1;
    break;
case SidebarView.Bio:
    ButtonBio.State = 1;
    break;
case SidebarView.Lyrics:
    ButtonLyrics.State = 1;
    break;
//case SidebarView.Video:
//    ButtonVideo.State = 1;
//    break;
default:
    break;
}

var PlaybackOrder = {
    Default: 0,
    RepeatPlaylist: 1,
    RepeatTrack: 2,
    Random: 3,
    ShuffleTracks: 4,
    ShuffleAlbums: 5,
    ShuffleFolders: 6   
};
switch(plman.PlaybackOrder)
{
case PlaybackOrder.Default:
    ButtonRepeat.State = 0;
    ButtonShuffle.State = 0;
    break;
case PlaybackOrder.RepeatPlaylist:
    ButtonRepeat.State = 1;
    ButtonShuffle.State = 0;
    break;
case PlaybackOrder.RepeatTrack:
    ButtonRepeat.State = 2;
    ButtonShuffle.State = 0;
    break;
case PlaybackOrder.ShuffleTracks:
    ButtonRepeat.State = 0;
    ButtonShuffle.State = 1;
    break;
default:
    break;
}

var WindowState = {
    Normal: 0,
    Minimized: 1,
    Maximized: 2
};
ButtonMiniPlayer.State = window.GetProperty("Mini view", false) ? 1 : 0;
var UIHacks = new ActiveXObject("UIHacks");
var switchToMiniFromMaximized = false, switchFromMiniToFull = false;
set_player_size(true);

function on_size() {
    _ww = window.Width;
    _wh = window.Height;   
    if(window.GetProperty("Mini view", false)) { 
        if(UIHacks.MainWindowState == WindowState.Maximized) {
            UIHacks.MainWindowState = WindowState.Normal;           
            return;
        }
        else {
            if(switchToMiniFromMaximized) {
                set_player_size(false);
            }
        }
    }
    else {
        if(!switchFromMiniToFull && UIHacks.MainWindowState != WindowState.Maximized) {
            window.SetProperty("Full view fullscreen", false);
            window.SetProperty("Full view maximized", false);
        }
    }       

    _mainViewWidth = _ww - _sidebarWidth;
    move_buttons();
    if (on_timer)
    window.ClearTimeout(on_timer);
 
   Playlist.Show(false);
   Plorg.Show(false);
   Lib.Show(false);
   Playlist.Show(false);
   Info.Show(false);
   Bio.Show(false);
   Lyrics.Show(false);
   Time.Show(false);
   Search.Show(false);
   Waveform.Show(false);
   Seekbar.Show(false);
   Volume.Show(false);
   Artwork.Show(false);
   StatusInfo.Show(false);
   Shpeck.Show(false);
   LibPlaylist.Show(false);
   Spectrum.Show(false);
    chsz = false;
   if (on_timer){
_cover_image = null;
   window.Repaint();
   }
 window.SetTimeout(on_timer, 500);
}
function on_timer() {
do_layout();

window.ClearTimeout(on_timer);

if(!chsz){
    chsz = true ;
var AlbumArtId = {
    front: 0,
    back: 1,
    disc: 2,
    icon: 3,
    artist: 4
};
var meta_now = fb.GetNowPlaying();
if(meta_now) _cover_image = utils.GetAlbumArtV2(meta_now, AlbumArtId.front, false);
function on_playback_new_track(metadb) {
    _cover_image = null;
    _cover_image = utils.GetAlbumArtV2(metadb, AlbumArtId.front, false);
    window.Repaint();
}
}

}
function move_buttons() {     
    ButtonSeekbar.Move(_mainViewWidth - 26 * _scale, 44 * _scale);
       
    ButtonPlaylist.Move(2 * _scale, _wh - 28 * _scale);
    ButtonLibPlaylist.Move(28 * _scale, _wh - 28 * _scale);
    ButtonShpeck.Move(54 * _scale, _wh - 28 * _scale);
    if(!window.GetProperty("Mini view", false))
        ButtonMiniPlayer.Move(80 * _scale, _wh - 28 * _scale);
    else
        ButtonMiniPlayer.Move(2 * _scale, _wh - 28 * _scale);
    ButtonNowPlaying.Move(106 * _scale, _wh - 28 * _scale);

    ButtonPlorg.Move(_mainViewWidth + 20 * _scale, 35 * _scale);
    ButtonLibrary.Move(_mainViewWidth + 46 * _scale, 35 * _scale);
    ButtonInfo.Move(_mainViewWidth + 72 * _scale, 35 * _scale);
    ButtonBio.Move(_mainViewWidth + 98 * _scale, 35 * _scale);
    ButtonLyrics.Move(_mainViewWidth + 124 * _scale, 35 * _scale);
    //ButtonVideo.Move(_mainViewWidth + 150 * _scale, 35 * _scale);
    ButtonPreferences.Move(_sidebarWidth > 175 * _scale ? _ww - 30 * _scale : _mainViewWidth + 148 * _scale, 35 * _scale);   
}

var Spectrum = window.GetPanel("Spectrum");
var Waveform = window.GetPanel("Waveform");
var VUMeter = window.GetPanel("VUMeter");
var Seekbar = window.GetPanel("Seekbar");
var Time = window.GetPanel("Time");
var Playlist = window.GetPanel("Playlist");
Playlist.SupportPseudoTransparency = true;
var LibPlaylist = window.GetPanel("LibPlaylist");
var Shpeck = window.GetPanel("Shpeck");
// Для автостарта шпека
    Shpeck.Show();
    Shpeck.Move(0, 70, 10, 10);         
var StatusInfo = window.GetPanel("StatusInfo");
var Search = window.GetPanel("Search");
var Plorg = window.GetPanel("Plorg");
var Lib = window.GetPanel("Lib");
var Info = window.GetPanel("Info");
var Bio = window.GetPanel("Bio");
var Artwork = window.GetPanel("Artwork");
var Lyrics = window.GetPanel("Lyrics");
//var Video = window.GetPanel("Video");
var Volume = window.GetPanel("Volume");


function do_layout() {
    switch(window.GetProperty("Seekbar mode", SeekbarMode.Spectrum))
    {
      case SeekbarMode.Spectrum:
         Waveform.Hidden = VUMeter.Hidden = true;
         Spectrum.Move(240 * _scale, 0, _mainViewWidth - 325 * _scale, 50 * _scale);
         Spectrum.Show();
         Seekbar.Move(240 * _scale, 50 * _scale, _mainViewWidth - 325 * _scale, 20 * _scale);
         Seekbar.Show();
         break;
      case SeekbarMode.Waveform:
         Spectrum.Hidden = Seekbar.Hidden = VUMeter.Hidden = true;
         Waveform.Move(240 * _scale, 0, _mainViewWidth - 325 * _scale, 70 * _scale);
         Waveform.Show();
         break;
      case SeekbarMode.VUMeter:
         Spectrum.Hidden = Waveform.Hidden = true;
         VUMeter.Move(240 * _scale, 0, _mainViewWidth - 325 * _scale, 50 * _scale);
         VUMeter.Show();
         Seekbar.Move(240 * _scale, 50 * _scale, _mainViewWidth - 325 * _scale, 20 * _scale);
         Seekbar.Show();
         break;
      case SeekbarMode.Simple:
         Spectrum.Hidden = Waveform.Hidden = VUMeter.Hidden = true;
         Seekbar.Move(240 * _scale, 0, _mainViewWidth - 325 * _scale, 70 * _scale);
         Seekbar.Show();
         break;
      default:
         break;
    }
   
    Time.Move(_mainViewWidth - 85 * _scale, 0, 85 * _scale, 44 * _scale);
    Time.Show();

    switch(window.GetProperty("View mode", ViewMode.Playlist))
    {
      case ViewMode.Playlist:
         LibPlaylist.Hidden = Shpeck.Hidden = true;
         Playlist.Move(0, 70 * _scale, _mainViewWidth, _wh - 100 * _scale);
         Playlist.Show();
         break;
      case ViewMode.LibPlaylist:
         Playlist.Hidden = Shpeck.Hidden = true;
         LibPlaylist.Move(0, 70 * _scale, _mainViewWidth, _wh - 100 * _scale);
         LibPlaylist.Show();
         break;
      case ViewMode.Shpeck:
         Playlist.Hidden = LibPlaylist.Hidden = true;
         Shpeck.Show();
         Shpeck.Move(0, 70 * _scale, _mainViewWidth, _wh - 100 * _scale);
         break;
      default:
         break;
    }

    if(!window.GetProperty("Mini view", false))
        StatusInfo.Move(136 * _scale, _wh - 30 * _scale, _mainViewWidth - 136 * _scale, 30 * _scale);
    else {
        if(!window.GetProperty("Volume expand"))
            StatusInfo.Move(32 * _scale, _wh - 30 * _scale, _mainViewWidth - 64 * _scale, 30 * _scale);
        else
            StatusInfo.Move(32 * _scale, _wh - 30 * _scale, _mainViewWidth - 194 * _scale, 30 * _scale);
    }
    StatusInfo.Show();

    Search.Move(_mainViewWidth + 20 * _scale, 5 * _scale, _sidebarWidth - 24 * _scale, 22 * _scale);
    Search.Show();

    switch(window.GetProperty("Sidebar view", SidebarView.Plorg))
    {
      case SidebarView.Plorg:
         Lib.Hidden = Info.Hidden = Bio.Hidden = Artwork.Hidden = Lyrics.Hidden = true;//Video.Hidden = true;
         Plorg.Move(_mainViewWidth + 5 * _scale, 70 * _scale, _sidebarWidth - 5 * _scale, _wh - 100 * _scale);
         Plorg.Show();
         break;
      case SidebarView.Library:
         Plorg.Hidden = Info.Hidden = Bio.Hidden = Artwork.Hidden = Lyrics.Hidden = true;//Video.Hidden = true;
         Lib.Move(_mainViewWidth + 5 * _scale, 70 * _scale, _sidebarWidth + 12 * _scale, _wh - 100 * _scale);
         Lib.Show();
         break;
      case SidebarView.Info:
         Plorg.Hidden = Lib.Hidden = Bio.Hidden = Artwork.Hidden = Lyrics.Hidden = true;//Video.Hidden = true;
         Info.Move(_mainViewWidth + 10 * _scale, 70 * _scale, _sidebarWidth - 10 * _scale, _wh - 100 * _scale);
         Info.Show();
         break;
      case SidebarView.Bio:
         Plorg.Hidden = Lib.Hidden = Info.Hidden = Artwork.Hidden = Lyrics.Hidden = true;//Video.Hidden = true;
         Bio.Move(_mainViewWidth + 10 * _scale, 70 * _scale, _sidebarWidth - 10 * _scale, _wh - 100 * _scale);
         Bio.Show();
         break;
      case SidebarView.Lyrics:
         Plorg.Hidden = Lib.Hidden = Info.Hidden = Bio.Hidden = true;//Video.Hidden = true;
         Artwork.Move(_mainViewWidth + 10 * _scale, 70 * _scale, _sidebarWidth - 10 * _scale, _lyricsArtHeight);
         Artwork.Show();
         Lyrics.Move(_mainViewWidth + 10 * _scale, 70 * _scale + _lyricsArtHeight + 5 * _scale, _sidebarWidth - 20 * _scale, _wh - 105 * _scale - _lyricsArtHeight);
         Lyrics.Show();
         break;
    //      case SidebarView.Video:
    //         Plorg.Hidden = Lib.Hidden = Bio.Hidden = Info.Hidden = Artwork.Hidden = Lyrics.Hidden = true;
    //         Video.Move(_mainViewWidth + 10 * _scale, 70 * _scale, _sidebarWidth - 10 * _scale, _wh - 100 * _scale);
    //         Video.Show();
    //         break;
      default:
         break;
    }

    if(!window.GetProperty("Volume expand", false))
        Volume.Move(_ww - 25 * _scale, _wh - 30 * _scale, 26 * _scale, 30 * _scale);
    else {
        if(!window.GetProperty("Mini view", false)) {
            if(_sidebarWidth >= 160 * _scale)
               Volume.Move(_ww - 160 * _scale, _wh - 30 * _scale, 161 * _scale, 30 * _scale);
            else
                Volume.Move(_ww - _sidebarWidth, _wh - 30 * _scale, _sidebarWidth + 1 * _scale, 30 * _scale);
        }
        else
            Volume.Move(_mainViewWidth - 155 * _scale, _wh - 30 * _scale, 156 * _scale, 30 * _scale);
    }
    Volume.Show();
}

function set_player_size(init) {

    if(window.GetProperty("Mini view", false)) {       
        if(UIHacks.MainWindowState == WindowState.Maximized) {
            switchToMiniFromMaximized = true;
            window.SetProperty("Full view fullscreen", UIHacks.FullScreen);
            window.SetProperty("Full view maximized", true);
            UIHacks.MainWindowState = WindowState.Normal;
            return;
        }
        else {
            if(!switchToMiniFromMaximized) {
                window.SetProperty("Full view fullscreen", false);
                window.SetProperty("Full view maximized", false);
            }
            switchToMiniFromMaximized = false;
        }       
        if(!init) {
            window.SetProperty("Full view x", window.FoobarWindowX);
            window.SetProperty("Full view y", window.FoobarWindowY);
            window.SetProperty("Full view width", window.FoobarWindowWidth);
            window.SetProperty("Full view height", window.FoobarWindowHeight);
            window.SetProperty("Full view sidebar width", _sidebarWidth);
        }
        ButtonPlaylist.Hidden = ButtonLibPlaylist.Hidden = ButtonShpeck.Hidden = ButtonNowPlaying.Hidden = true;
        window.SetProperty("Sidebar width", 5 * _scale);
        _sidebarWidth = 5 * _scale;
        UIHacks.MinSize.Width = 315 * _scale;
        UIHacks.MaxSize.Width = 500 * _scale;
        UIHacks.MinSize.Height = UIHacks.MaxSize.Height = 95 * _scale;
        UIHacks.MinSize.Enabled = UIHacks.MaxSize.Enabled = true;
        window.FoobarWindowX = window.GetProperty("Mini view x", window.FoobarWindowX);
        window.FoobarWindowY = window.GetProperty("Mini view y", window.FoobarWindowY);
        window.FoobarWindowWidth = window.GetProperty("Mini view width", window.FoobarWindowWidth);
        window.NotifyOthers("Mini view", true);
    }
    else {
        if(!init) {
            window.SetProperty("Mini view x", window.FoobarWindowX);
            window.SetProperty("Mini view y", window.FoobarWindowY);
            window.SetProperty("Mini view width", window.FoobarWindowWidth);
        }
        _sidebarWidth = window.GetProperty("Full view sidebar width", 320 * _scale);
      window.SetProperty("Sidebar width", _sidebarWidth);
        switchFromMiniToFull = true;
        UIHacks.MinSize.Width = _sidebarWidth + 310 * _scale;
        UIHacks.MinSize.Height = 100 * _scale;
        UIHacks.MinSize.Enabled = true;     
        UIHacks.MaxSize.Enabled = false;       
        window.FoobarWindowX = window.GetProperty("Full view x", 200 * _scale);
        window.FoobarWindowY = window.GetProperty("Full view y", 200 * _scale);
        window.FoobarWindowWidth = window.GetProperty("Full view width", 1100 * _scale);
        window.FoobarWindowHeight = window.GetProperty("Full view height", 700 * _scale);
        if(window.GetProperty("Full view fullscreen", false)) UIHacks.FullScreen = true;
        else if(window.GetProperty("Full view maximized", false)) UIHacks.MainWindowState = WindowState.Maximized;
        switchFromMiniToFull = false;
        ButtonPlaylist.Hidden = ButtonLibPlaylist.Hidden = ButtonShpeck.Hidden = ButtonNowPlaying.Hidden = false;
        window.NotifyOthers("Mini view", false);
    }           
}

function on_paint(gr) {   
    gr.FillSolidRect(0, 0, _ww, _wh, _bgColor);
    gr.DrawRect(_mainViewWidth + 19 * _scale, 4 * _scale, _sidebarWidth - 22 * _scale, 24 * _scale, 1 * _scale, 0xFF646464);

    // Фоновая обложка для обычного плейлиста
    if(window.GetProperty("View mode", ViewMode.Playlist) == ViewMode.Playlist)
    {
        var ps_width = _mainViewWidth;
        var ps_height = _wh - 100 * _scale;
        gr.FillSolidRect(0, 70 * _scale, ps_width, ps_height, _bgColor);
        if(_cover_image && ps_width > 0 && ps_height > 0 && chsz) {
            if(ps_width > ps_height)
            {
                var dy = _cover_image.Height - ps_height * _cover_image.Width / ps_width;
                gr.DrawImage(_cover_image, 0, 70 * _scale, ps_width, ps_height, 0, dy / 2, _cover_image.Width, _cover_image.Height - dy, 0, _alpha);
            }
            else
            {
                var dx = _cover_image.Width - ps_width * _cover_image.Height / ps_height;
                gr.DrawImage(_cover_image, 0, 70 * _scale, ps_width, ps_height, dx / 2, 0, _cover_image.Width - dx, _cover_image.Height, 0, _alpha);
            }
        }
    }

    if(_dragSidebar) gr.FillSolidRect(_newMainViewWidth, 0, 5 * _scale, _wh, 0xFFE81123);
    else
    if(_dragLyricsArt) gr.FillSolidRect(_mainViewWidth + 10 * _scale, 70 * _scale + _newLyricsArtHeight, _sidebarWidth - 10 * _scale, 5 * _scale, 0xFFE81123);
}

function on_button_click(id) {
    switch(id)
    {
    case ButtonStop.ID:
        fb.Stop();
        break;
    case ButtonPrev.ID:
        fb.Prev();
        break;
    case ButtonPlay.ID:
        if(fb.IsPlaying) fb.Pause(); else fb.Play();
        break;
    case ButtonNext.ID:
        fb.Next();
        break;
    case ButtonOpen.ID:
        fb.RunMainMenuCommand("File/Open...");
        break;
    case ButtonRepeat.ID:
        ButtonShuffle.State = 0;
        plman.PlaybackOrder = ButtonRepeat.State;
        break;
    case ButtonShuffle.ID:
        ButtonRepeat.State = 0;
        if(ButtonShuffle.State == 1)
            plman.PlaybackOrder = PlaybackOrder.ShuffleTracks;
        else
            plman.PlaybackOrder = PlaybackOrder.Default;
        break;
    case ButtonSeekbar.ID:
        window.SetProperty("Seekbar mode", ButtonSeekbar.State);
        break;
    case ButtonPlaylist.ID:
        window.SetProperty("View mode", ViewMode.Playlist);
        break;
    case ButtonLibPlaylist.ID:
        window.SetProperty("View mode", ViewMode.LibPlaylist);
        break;
    case ButtonShpeck.ID:
        window.SetProperty("View mode", ViewMode.Shpeck);
        break;
    case ButtonNowPlaying.ID:
        fb.RunMainMenuCommand("View/Playlist view/Activate now playing");   
        break;
    case ButtonMiniPlayer.ID:
        window.SetProperty("Mini view", !window.GetProperty("Mini view", false));
        set_player_size(false);
        break;
    case ButtonPlorg.ID:
        window.SetProperty("Sidebar view", SidebarView.Plorg);
        break;
    case ButtonLibrary.ID:
        window.SetProperty("Sidebar view", SidebarView.Library);
        break;
    case ButtonInfo.ID:
        window.SetProperty("Sidebar view", SidebarView.Info);
        break;
    case ButtonBio.ID:
        window.SetProperty("Sidebar view", SidebarView.Bio);
        break;
    case ButtonLyrics.ID:
        window.SetProperty("Sidebar view", SidebarView.Lyrics);
        break;
    case ButtonPreferences.ID:
        fb.RunMainMenuCommand("File/Preferences");               
        break;
    default:
        break;
    }

    do_layout();
}

function on_playback_starting(cmd, is_paused) {
    ButtonPlay.State = is_paused ? 0 : 1;
}
function on_playback_pause(state) {
    ButtonPlay.State = state ? 0 : 1;
}
function on_playback_stop(reason) {
    ButtonPlay.State = 0;
}
var AlbumArtId = {
    front: 0,
    back: 1,
    disc: 2,
    icon: 3,
    artist: 4
};
var meta_now = fb.GetNowPlaying();
if(meta_now) _cover_image = utils.GetAlbumArtV2(meta_now, AlbumArtId.front, false);
function on_playback_new_track(metadb) {
    _cover_image = null;
    _cover_image = utils.GetAlbumArtV2(metadb, AlbumArtId.front, false);
    window.Repaint();
}

var _dragSidebar = false, _dragLyricsArt = false;

function set_sidebar_width(width) {
    window.SetProperty("Sidebar width", width);
    if(!window.GetProperty("Mini view", false)) window.SetProperty("Full view sidebar width", width);
    _sidebarWidth = width;
    _mainViewWidth = _ww - _sidebarWidth;
    UIHacks.MinSize.Width = _sidebarWidth + 310 * _scale;
    move_buttons();
    do_layout();
    window.Repaint();
}

function on_mouse_lbtn_down(x, y, mask) {
    if(!window.GetProperty("Lock sidebar", false) && !window.GetProperty("Mini view", false) && x >= _mainViewWidth && x < _mainViewWidth + 5 * _scale)
    {
      _dragSidebar = true;
        _newMainViewWidth = _mainViewWidth;
        _newSidebarWidth = _sidebarWidth;
      window.Repaint();
    }
    else
    if(x > _mainViewWidth && y >= 70 * _scale + _lyricsArtHeight && y <= 70 * _scale + _lyricsArtHeight + 5 * _scale)
    {
      _dragLyricsArt = true;
        _newLyricsArtHeight = _lyricsArtHeight;
        window.Repaint();
    }
}

function on_mouse_lbtn_up(x, y, mask) {
    if(_dragSidebar)
    {
        _dragSidebar = false;
        _mainViewWidth = _newMainViewWidth;
        _sidebarWidth = _newSidebarWidth;
        set_sidebar_width(_sidebarWidth);
    }
    if(_dragLyricsArt)
    {
        _dragLyricsArt = false;
        _lyricsArtHeight = _newLyricsArtHeight;
        window.SetProperty("Lyrics art height", _lyricsArtHeight);
        do_layout();
        window.Repaint();
    }
}

function on_mouse_lbtn_dblclk(x, y, mask) {
    if(!window.GetProperty("Lock sidebar", false) && x >= _mainViewWidth && x < _mainViewWidth + 5 * _scale)
    {
        set_sidebar_width(320 * _scale);
        window.Repaint();
    }
    else
    if(x >= _mainViewWidth && y >= 70 * _scale + _lyricsArtHeight && y <= 70 * _scale + _lyricsArtHeight + 5 * _scale)
    {
        _lyricsArtHeight = 150 * _scale;
        window.SetProperty("Lyrics art height", _lyricsArtHeight);
        do_layout();
        window.Repaint();
    }   
}

var IDC_ARROW = 32512;
var IDC_HAND = 32649;
var IDC_SIZEWE = 32644;
var IDC_SIZENS = 32645;

function on_mouse_move(x, y, mask) {
   
    if(!window.GetProperty("Lock sidebar", false) && !window.GetProperty("Mini view", false) && x >= _mainViewWidth && x < _mainViewWidth + 5 * _scale)
       window.SetCursor(IDC_SIZEWE);
    else
    if(x >= _mainViewWidth && y >= 70 * _scale + _lyricsArtHeight && y <= 70 * _scale + _lyricsArtHeight + 5 * _scale)
       window.SetCursor(IDC_SIZENS);
    else
      window.SetCursor(IDC_ARROW);

    if(_dragSidebar)
    {
        window.SetCursor(IDC_SIZEWE);
        _newMainViewWidth = x;
        _newSidebarWidth = _ww - x;
        if(_newSidebarWidth < 5 * _scale)
        {
            _newSidebarWidth = 5 * _scale;
            _newMainViewWidth = _ww - 10 * _scale;
        }
        if(_newMainViewWidth < 310 * _scale)
        {
            _newMainViewWidth = 310 * _scale;
            _newSidebarWidth = _ww - 310 * _scale;
        }
        window.Repaint();
    }
    else
    if(_dragLyricsArt)
    {
        window.SetCursor(IDC_SIZENS);
      _newLyricsArtHeight = y - 70 * _scale;
      if(_newLyricsArtHeight < 0) _newLyricsArtHeight = 0;
        if(_newLyricsArtHeight > _wh - 105 * _scale) _newLyricsArtHeight = _wh - 105 * _scale;
        window.Repaint();
    }
}

var MF_ENABLED = 0x00000000;   

function on_mouse_rbtn_up(x, y, mask) {
   
    if(x <= _mainViewWidth) return true;

    var sidebarLocked = window.GetProperty("Lock sidebar", false);

    var menu = window.CreatePopupMenu();   
    menu.AppendMenuItem(MF_ENABLED, 10, "Lock sidebar");
    menu.CheckMenuItem(10, sidebarLocked);
    var ret = menu.TrackPopupMenu(x,y);
    switch(ret)
    {
      case 10:
         window.SetProperty("Lock sidebar", !sidebarLocked);
         break;
      case 20:
         window.ShowProperties();
         
         break;
      case 30:
         window.ShowConfigure();
         break;
      default:
         break;
    }

    return true;
}

function on_notify_data(name, info) {
    if(name != "Volume expand") return;
    window.SetProperty("Volume expand", info);
   do_layout();
}
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #2920 SergPuh.68 » 09.10.2021, 00:24

В сборке у LUR работает хорошо,у меня нет.У меня JSplitter 2.7.2
SergPuh.68 M В сети
Аватара
Откуда: Украина
Репутация: 142
С нами: 5 лет 2 месяца

Пред.След.

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