====== Single Column Playlist Viewer (foo_uie_single_column_playlist) ======
===== Внимание! =====
**SINGLE COLUMN PLAYLIST VIEWER ТЕПЕРЬ НАЗЫВАЕТСЯ SINGLE COLUMN PLAYLIST И ЯВЛЯЕТСЯ ЧАСТЬЮ [[foobar2000:plugins_for_0.9.x:foo_ui_panels_foo_ui_panels]], И ОТДЕЛЬНО БОЛЬШЕ НЕ ПОДДЕРЖИВАЕТСЯ.**
===== Аннотация =====
Оригинал: [[http://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Components_0.9/Single_Column_Playlist_%28foo_uie_single_column_playlist%29|Single Column Playlist (foo uie single column playlist)]] (англ.)
===== Требования =====
* [[http://download.microsoft.com/download/d/3/4/d342efa6-3266-4157-a2ec-5174867be706/vcredist_x86.exe|C++ 2005 Redistr (2,56Mb)]]
===== Общее =====
Показывает плейлист в одну колонку с заголовками. Панель полезна для создания узких и маленьких конфигураций/раскладок Columns UI.
{{foobar2000:plugins:uie:minifooim0.png?150|Single Column Playlist}}
Панель в версии **БЕТА** и тщательно не исследовалась, поэтому делайте бекапы своих конфигураций.
[[http://wiki.foobar2000.ru/foobar2000:plugins_for_0.9.x:single_column_playlist_foo_uie_single_column_playlist|Single Column Playlist]] (или SCP) — это компонент, созданный пользователем [[http://www.hydrogenaudio.org/forums/index.php?showuser=33259|Terrestrial]] на основе кода [[foobar2000:plugins_for_0.9.x:track_info_panel_mod_foo_uie_trackinfo_mod]]. Данный компонент создает одноколоночный плейлист с //заголовками//, который полезен для создания узких и небольших конфигураций.
//Примечание: теги форматирования, доступные в SCP, почти идентичны тегам [[foobar2000:plugins_for_0.9.x:track_info_panel_mod_foo_uie_trackinfo_mod]].//
=====Установка=====
Убедитесь, что сделан бекап вашей конфигурации перед установкой или обновлением версии. SCP требует .NET C++. Если у вас нет .NET C++, то вы получите ошибку при запуске плеера:
Failed to load DLL: foo_uie_single_column_playlist.dll
Reason: This application has failed to start because the application configuration is incorrect.
Reinstalling the application may fix this problem.
Вы можете скачать .NET framework, который установит нужные DLL с сайта http://www.windowsupdate.com, или в качестве альтернативного варианта, скачать C++ runtime components с сайта [[http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en|Microsoft.com]].
=====Окно конфигурации=====
{{foobar2000:plugins:uie:scp_config1.png|Окно конфигурации}}
**Начальная настройка и конфигурирование SCP такие же, как и для большинства компонентов Columns UI.** Чтобы начать использовать SCP, откройте настройки Foobar2000 и найдите группу Columns UI. На вкладке "Layout" кликните правой кнопкой по основе (сплиттеру) и выберите "Insert Panel -> Playlist view -> Single Column Playlist View. Таким образом вы вставите экземпляр SCP в раскладку Columns UI. Чтобы попасть в настройки экземпляра SCP, выберите его и нажмите кнопку конфигурирования — Configure.
ВНИМАНИЕ! Конфигурации SCP не хранятся в отдельных текстовых файлах. Удаление экземпляра SCP из раскладки Columns UI (layout) также удалит его конфигурацию, поэтому храните ваш код в безопасном месте.
Быстрый доступ к конфигурированию SCP возможен из окна основного плейлиста. Кликните правой кнопкой по окну основного плейлиста и выберите "Settings..." из контекстного меню.
====Группировка====
Размещение заголовка над группой элементов, у которых есть общие характеристики определяемые пользователем. Заголовок отображает информацию, взятую из тега ПЕРВОГО элемента группы; теги других элементов НЕДОСТУПНЫ для заголовка. Группировка НЕ СОРТИРУЕТ. Другими словами, группировка не меняет порядок в котором элементы появляются в плейлисте. Сортировка возможна либо через отдельную команду SORT, которая будет описана ниже, либо через Columns UI.
Критерии для группировки определяются в секции "Group By" окна конфигурирования Single Column Playlist с помощью доступных функций (например, ''$if(,,) $replace(,,) %artist%'', и т.д.).
Следующий пример создает новую группу для каждого нового альбома или для каждого нового диска (если доступен альбом).
$if2(%disc%,%album%)
====Item display====
Код здесь затрагивает конкретные элементы в single column playlist. Можно использовать такие переменные, как ''title, track number, length, rating'' и так далее.
====Group display====
Код здесь затрагивает заголовок ряда для групп элементов плейлиста. ''Artist, album, genre, bitrate, date, codec, album art'' или любой критерий, выбранный вами для группировки.
====Row height====
Высота ряда. Установка размера каждого элемента плейлиста в пикселях. Если высота какого-то ряда будет будет больше, то все равно обрежется до указанного.
====Group row====
Это новая опция SCP, которая устанавливает количество рядов для заголовка группы. Значение по умолчанию равно 2 — означает, что в заголовке содержится два ряда информации. Кроме того, заголовок может иметь больший размер шрифта по сравнению с другими данными в рядах.
=====Функции=====
====Выравнивание текста====
===Обычное выравние текста===
**$align(H,V)**
^Параметр ^Определение ^Примечание^
|**(H)orizontal**|Горизонально. Может принимать значения ''left, center'' и ''right'' (слева, по центру или справа).||
|**(V)ertical**|Вертикально. Может принимать значения ''top, middle'' и ''bottom'' (сверху, по середине или снизу).|''top'' будет проверяться на перезапись.|
Если с помощью этой функции выравнять несколько раз подряд (например, ''$align(left,middle)'' больше чем один раз), то выравнивание будет происходить с той же точки отсчета.
===Чтобы выравнять текст относительно===
**$alignset() - $alignrel(H,V)**
^Параметр ^Определение ^Примечание^
|**(H)orizontal**|Горизонтально. Может принимать значения ''left, center'' и ''right'' (слева, по центру или справа).||
|**(V)ertical**|Вертикально. Может принимать значения ''top, middle'' и ''bottom'' (сверху, по середине и внизу).|''top'' будет проверяться на перезапись.|
|**$alignset()**|Устанавливает точку отсчета для ''$alignrel(H,V)''.|Может применяться как замена функции ''$char(10)'', работает для всех следующих ''$alignrel(H,V)''.|
Например:
$alignrel(left,middle) //Линия1_слева// $alignrel(center,middle) //Линия1_по_центру// $alignset() $alignrel(right,middle) //Линия2_справа//
===Чтобы выравнять текст абсолютно (без проверки на перезапись текста)===
**$alignabs(X,Y,w,h,H,V)**
^Параметр ^Определение ^Примечание^
|**X & Y**|Координаты позиции границ прямоугольника в котором будет происходить выравнивание|Значения могут быть отрицательными.|
|**(W)idth & (H)eight**|Ширина и высота прямоугольника в котором будет происходить выравнивание текста.||
|**H & V**|см. таблицу выше||.
//Примечание: $alignabs(**H**,**V**) может быть использована для относительного выравнивания без проверки на перезапись.//
====Стили шрифтов====
**$font(NAME,SIZE,OPTIONS,COLOR)**
^Параметр ^Определение ^Примечание^
|**NAME**|Название шрифта.||
|**SIZE**|Размер шрифта.||
|**OPTIONS**|Опции. Могут иметь значение ''bold, italic, underline, strikeout, nocleartype, glow-'' и ''shadow''| Также, возможно совмещать значения, например, //"bolditalicunderlineglow-"// даст комбинацию этих эффектов. Значения по-умолчанию для ''glow'' — glowexpand-2 и glowblur-2.|
|**COLOR**|Цвет. Цвет шрифта указывается в пространстве R-G-B.|Например, 255-0-0 даст красный цвет.|
Используйте //SYSCOL-x// для использования стандартных цветов из вашей темы Windows (msstyle). X — это номер цвета от 0 до ?.
Следующий пример создаст шрифт Arial, размером 10 пикселей, жирный, с синим эффектом glow и системным цевтом номер #15 (фон):
$font(Arial, 10, bold shadow glow-0-0-255,SYSCOL-15)
* Вы можете сохранять и восстанавливать значения переменных шрифта используя функции $put/$puts/$get (например, ''$puts(font,$font(Calibri,9,bold,100-100-100))''). Восстанавливать значения необходимо после использования функции ''$alignrel'', но не перед ней.
* Также, изменение настроек шрифта с помощью ''$get'' не оказывает никакого воздействия на ''$calcwidth/$calcheight''. Эти функции используют последнее реальное значение параметров ''$font'', даже если их задавали функцией ''$puts''.
* При использовании продвинутых эффектов отключается сглаживание (антиалиасинг) шрифтов (даже для alpha blending). Также, следующий текст влияет на предыдущий, так что, возможно, вам придется добавлять пробелы либо использовать функцию ''$alignabs''.
**Примеры шрифтов и код:**
{{foobar2000:plugins:uie:trackinfo-font-example.png|Примеры шрифтов Single Columns Playlist}}
====Изображения====
===$imageabs===
$imageabs(X,Y,imageName,imageOptions)
^Параметр ^Определение ^Примечание^
|**X & Y**|Абсолютная позиция изображения с отсчетом от верхнего левого угла.||
|**imageName**|Относительный путь к изображению из папки, где хранится конфигурация плеера.|Если отключена поддержка профилей, то папка конфигурации будет той же, куда установлен плеер. Однако, если включена поддержка профилей, то папка будет расположена в **C:\Documents and Settings\ИМЯ ПОЛЬЗОВАТЕЛЯ\Application Data\foobar2000\**|
|**imageOptions**|Может включать в себя другие параметры, влияющие на представление изображения.|Описание параметров ниже.|
Параметры **imageOptions**:
* //ALPHA-x//. Прозрачность изображения; указывается целым числом от 0 (полностью прозрачно) до 255 (непрозрачно).
* //FLOW//. Обтекание текста вокруг текста.
Пример:
$imageabs(0,0,%папка_конфигурации_foobar%\картинки\моя_картинка.png,flow alpha-150)
===$imageabs2===
**$imageabs2(areaWidth,areaHeight,imageLeft,imageTop,imageWidth,imageHeight,areaLeft,areaTop,imagePath,imageOptions)**
^Параметр ^Определение ^Примечание^
|areaWidth & areaHeight|Параметры, управляющие размером изображения. Позволяют только уменьшать изображение.||
|imageLeft & imageTop|Указывают на позицию уменьшенного изображения от левого верхнего угла.|**imageLeft** — горизонтальная позиция **уменьшенного** изображения, **imageTop** — вертикальная позиция **не уменьшенного** изображения. Если у вас есть изображение в формате JPEG размером 300x300 пикселей, и с помощью функций **areaWidth** и **areaHeight** оно уменьшено до размера 150x150 пикселей (**imageLeft** = 75 and **imageTop** = 150), то точка в верхнем левом углу финального изображения будет центром оригинального изображения 300x300.|
|imageWidth & imageHeight|Обрезание ширины и высоты, соответственно обрезание **сжатого** изображения.|Значения, которые больше, чем расстояние от обрезанного угла до границ уменьшенного изображения будут игнорироваться (обрезание как таковое будет пропущено). При значениях равных или больших, чем 32768, изображение вовсе не будет показано.|
|areaLeft & areaTop|Расстояние, соответственно, влево и вниз, от верхнего левого угла панели до верхнего левого угла финального уменьшенного и обрезанного изображения.||
|imagePath|Абсолютный или относительный путь к папке с изображениями.|Для относительных путей нужно поставить слеш ('/') в начале пути. (например, "/путь\до\изображение.jpg"). Когда будете использовать относительные пути, учтите, что корневая папка — это инсталляционная папка foobar2000.|
|imageOptions|Опции изображения.|Описание параметров ниже.|
Параметры **imageOptions**:
* //ALPHA-x//. Прозрачность изображения; указывается целым числом от 0 (полностью прозрачно) до 255 (непрозрачно).
* //NOKEEPASPECT//. При изменении размера игнорировать пропорции изображения (aspect ratio).
* //VALIGN-T (vertical align-TOP), VALIGN-B, HALIGN-L, HALIGN-R//. Опции выравнивания.
Более просто:
$imageabs2(Размеры сжатия,Положение угла обрезания,Размеры обрезания,Расположение панели,Путь,Опции изображения)
Пример:
$imageabs2(48,48,0,0,48,48,20,20,C:\Program Files\foobar2000 v0.9\icons\$replace(%filename_ext%,%filename%'.',)_48x48.png,alpha-192)
Уменьшить изображение до 24x24 (изначальный размер 48х48) без обрезания:
$imageabs2(**24**,**24**,0,0,**24**,**24**,20,20,/icons\$replace(%filename_ext%,%filename%'.',)_48x48.png,alpha-192)
====Отрисовка прямоугольника====
**$drawrect(X,Y,W,H,brushColor-R-G-B penColor-R-G-B OPTIONS)**
|X & Y|Позиция прямоугольника относительно верхнего левого угла.|Если эти параметры пропустить или выставить на ноль, то они заменятся минимальными значениями относительно ''$pad''.|
|W & H|Определяет ширину и высоту прямоугольника.|Если эти параметры пропустить или выставить на ноль, то они заменятся минимальными значениями относительно ''$pad''.|
|brushColor & penColor|Цвета фона и границы в пространстве R-G-B.|Например, 255-0-0 даст красный цвет. Параметры могут быть отключены с помощью -null (например, brushColor-null). Используйте //SYSCOL-x// для использования стандартных цветов из вашей темы Windows (msstyle). X — это номер цвета от 0 до ?.|
|OPTIONS|Опции прямоугольника.|Описание параметров ниже.|
**Параметры OPTIONS:**
При использовании сложных эффектов, таких как alpha blending или blurring, прямоугольник рисуется только используя цвет границы. Если вы укажите цвет фона, то возьмется цвет границы.
* //ALPHA// — интервал 0-255.
* //EXPAND// — расширить прямоугольник на столько-то пикселей.
* //BLUR// — размазать (заблёрить) изображение с таким-то значением.
* //WIDTH// — ширина границы (рисуется цветом границы). Значение по умолчанию — 1, если не отключено при помощи pencolor-null. Установка значения в 0 не отключает границу (значение остается 1).
Пример:
$drawrect(,,,,pencolor-0-0-255 brushcolor-null width-2 alpha-100 blur-2)
====Другие функции====
===Вычисление размеров===
Следующие функции возвращают размеры (в пикселях) элемента плейлиста или группы, в зависимости используете ли вы эти функции в **item display** или **group display** окна настроек Single Column Playlist:
%_height%
%_width%
Следующие функции возвращают индекс (номер) элемента ((Под элементом подразумевается трек в плейлисте)) в группе и количество элементов в группе:
%_itemindex%
%_itemcount%
Подобным же образом, следующие функции возвращают индекс (номер) элемента ((Под элементом подразумевается трек в плейлисте)) в плейлисте и количество элементов плейлиста:
%list_index%
%list_total%
Следующие функции возвращают ширину и высоту текста:
$calcwidth(//Text1//)
$calcheight(//Text1//)
$calcwidth(%artist%) не возвращает не длину //%artist%//, а скорее ширину текста, хранимого в теге artist.
===Проверка на выбор файла===
Если курсор в плейлисте стоит на элементе (треке).
%_selected%
Пример:
$if(%_selected%,$drawrect(2,1,$sub(%_width%,4),16,brushcolor-233-243-247 pencolor-203-233-246))
===Проверка на существование файла===
$fileexists(//Путь к файлу//)
Следующий пример ищет //folder.*// где расположены музыкальные файлы:
$if($fileexists($replace(%path%,%filename_ext%,folder.*),
Yes
,
No
)
===Перемещение треков или групп в плейлисте===
Нажмите Alt и перетащите мышкой, либо нажмите Alt-вверх/вниз
===Получение глобальных переменных Columns UI===
$get_global(//переменная//)
Синтакс такой же, как и в Columns UI.
//Примечание: для отображения глобальных переменных, возможно, потребуется перезапуск плеера.//
===Запрет заголовка===
!noheader!
Пример:
//В секции 'Group by'//
$if(%tracknumber%,%artist%,!noheader!)
=====Советы и секреты=====
===Как растянуть изображение на несколько рядов===
растянуть изображение на несколько рядов можно при помощи ''%tracknumber%'' или ''%list_index%'', чтобы генерировать вертикальное смещение каждый раз при прорисовке изображения на каждом ряду. Код ниже поместите item display.
**Пример Tracknumber:**
Этот пример использует %tracknumber% для определения расположения путем умножения высоты ряда на tracknumber:
$imageabs(X OFFSET,$add(STARTING Y OFFSET,$mul(-ROW HEIGHT,%tracknumber%)),IMAGE DIRECTORY/IMAGE.png,)
Например, при высоте ряда 26 пикселей и горизонтальной (x) позицией 0 и начальный вертикальным смещением 25:
$imageabs(0,$add(25,$mul(-26,%tracknumber%)),images/test.png,)
**Пример List Index:**
Другой алгоритм использует ''%list_index%''. Этот пример рисует левую и правую границу single playlist column. Изображение шире, чем ширина ряда, поэтому нужно пользоваться техникой смещения.
* Сначала определим ширину и высоту изображения:
$puts(art.width,30)
$puts(art.height,60)
* Расчитаем число рядов, необходимое для отображения изображения:
$puts(art.num,$add($div($mul(%list_index%,%_height%),$get(art.height)),1))
* Используем высоту и количество изображений для генерации смещения для каждого элемента:
$puts(art.offset,-$sub($sub($mul(%list_index%,%_height%),$mul($sub($get(art.num),1),$get(art.height))),%_height%))
* Используем смещение:
$imageabs(0,$get(art.offset),images\column.left.png,)
* Используем ширину для смещения по горизонтали для самой правой границы:
$imageabs($sub(%_width%,$get(art.width)),$get(art.offset),images\column.right.png,)
===Группа, основанная на имени плейлиста===
Используем компонент [[foobar2000:plugins_for_0.9.x:cwbowron_s_title_formating_foo_cwb_hooks]]:
$if($strstr(%cwb_activelist%,'TERM'), SORT BY IF MATCH, ELSE SORT BY THIS)
Например,
$if($strstr(%cwb_activelist%,'-s-'), %rating%, %album%)
Этот код группирует альбом для всех плейлистов, если в плейлисте нет '-s-'. Если -s- есть, то элементы сгруппируются по рейтингу. (Strstr сравнивает две строки чтобы проверить наличие -s- в cwb_activeplaylist)
=====Примеры=====
====Толкование настройки по умолчанию====
===Group By===
* Группировка элементов по альбому:
%album%
===Item Display===
* Рисует заполненный прямоугольник стандартным системным цветом "SYSCOL-13":
$if(%_selected%,$drawrect(0,0,0,0,brushcolor-SYSCOL-13 pencolor-null))
* Рисует границу вокруг выбранного элемента цветом границы (системным цветом "SYSCOL-6"):
$if(%_focused%,$drawrect(0,0,0,0,brushcolor-null pencolor-SYSCOL-6))
* Меняет текст выбранного элемента, используя разный цвет:
$if(%_selected%,$textcolor(SYSCOL-9),$textcolor(SYSCOL-8))
* Устанавливает pagging рядов (horizontal, vertical):
$padding(4,0)
* Основной текст в каждом ряду выравнивается top left и right:
$align(left,top)%list_index%
$align(right,top)%title%
===Group Display===
* Рисует прямоугольник заголовка группы
$drawrect(0,0,0,0,brushcolor-130-130-255 pencolor-null)
* Устанавливает pagging заголовка:
$padding(4,0)
* Добавляет информацию альбома, дату и данные композитора:
$align(left,top)$font(,,bold,64-0-0)%album% '['%date%']'
$align(right,top)$font(,,bold,0-64-0)%composer%
(Values displayed are always those of the first item, without regard to the values of other items in the group.)
{{foobar2000:plugins:uie:single_column_playlist-3.png|}}
====Mazy's Design====
Указанный ниже код и скриншот создан пользователем [[http://www.hydrogenaudio.org/forums/index.php?showuser=7705|Mazy]].
===Item Display===
$if($strcmp($mod(%_playlist_number%,2),1),
$drawrect(,,,,brushcolor-245-245-245 pencolor-null))
$padding(2,0)
$font(calibri bold,9,$if(%isplaying%,underline,),170-170-170)
$replace(%title%,'(',$font(,,bold italic,204-204-204)'(')
$alignabs(6,13,%_width%,%_height%,,)
$font(CubicFive10,6,nocleartype,190-190-190)
[%length% | ]
[%bitrate% kbps]
$alignabs(0,-1,$sub(%_width%,2),%_height%,right,)
$font(CubicFive10,6,nocleartype,190-190-190)
[%play_count%x]
$if(%cwb_queueindex%, '['%cwb_queueindexes%/%cwb_queuelength%']')
$alignabs(0,10,$sub(%_width%,2),%_height%,right,)
$font(Wingdings,9,glow-190-190-190 glowexpand-1,250-250-250)
$repeat(«,%rating%)
===Group Display===
$padding(1,0)
$drawrect(,,,,brushcolor-119-213-249 pencolor-51-191-238)$padding(4,1)
$align(left,center)$font(calibri bold,9,,255-255-255)
$font(,,bold glow-18-173-224 glowexpand-1,)
%album%
$align(right,center)$font(,,bold,255-255-255)
%artist%
$puts(ar_w,$calcwidth(%artist%))
$drawrect($sub(%_width%,$get(ar_w),18),-1,3,%_height%,brushcolor-51-191-238 pencolor-null)
$drawrect($sub(%_width%,$get(ar_w),17),-1,1,%_height%,brushcolor-250-250-250 pencolor-null)
$alignabs(6,13,%_width%,%_height%,,)
$font(CubicFive12,6,nocleartype,18-173-224)
[%date% | ][%genre%]
$alignabs(0,10,$sub(%_width%,$get(ar_w),13),%_height%,right,)
$font(Wingdings,10,,)
$repeat(«,$rand(5))
$imageabs($sub(%_width%,$get(ar_w),98),0,data\misc images\playlist-refl.png,)
$imageabs($sub(%_width%,87),0,data\misc images\playlist-refl.png,)
===== Ссылки =====
* [[http://pelit.koillismaa.fi/plugins/redir.php?id=823|Скачать версию 0.5 beta]]
* [[http://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Components_0.9/Single_Column_Playlist_%28foo_uie_single_column_playlist%29|Подробное описание]] (англ.)
* [[http://users.bowie-cass.com/singa/foobar/bin/foo_uie_single_column_playlist.zip|Скачать]]