*必要なもの [#tc072a32]
-foobar2000
-Columns UI(CUI)
-Panel Stack Splitter(PSS)
-ELPlaylist(ELPL)

*TFについて [#af59d948]
Titleformat(TF)はfoobar2000中で特殊な働きをするスクリプトです。
TFを用いる(Title Formatting)と、柔軟で高度な動作を行うことができます。
このページの理解に不可欠ですので、必ず目を通してください。
**基本 [#wba40109]
基本的には、入力された文字列をTFに従って上から順に整形して出力します。
 あいうえお → 「あいうえお」と出力される
 %title% → トラックのタイトル名が出力される
 $greater(x, y) → xがyより大なら「真」と出力され、そうでないなら「偽」が出力される
これらの関数は、foobar2000の仕様に基づき処理されます。
また、コンポーネントが提供する関数が、TFを拡張します。
リファレンスに、関数とその書式、仕様が記載されています。
従って、リファレンスを見ながらTFを入力していくことになります。

但し、PSS/ELPLでは、出力しても表示はなされません。
代わりに、用意されている文字列表示関数を用いて描画します。
 $drawtext(あいうえお,x座標,y座標,幅,高さ,色,オプション)
この$drawtext()関数はfoobar2000標準のものではなく、PSS/ELPLが
独自に実装しているので、仕様はPSS/ELPLのリファレンスに記載されています。

**資料 [#c393c954]
-[[TitleFormatting 解説]]
-[[TFリファレンス日本語訳:http://tnetsixenon.xrea.jp/title_formatting.html]]
-PSS/ELPLに同梱のreadme.txt(大変重要です)
-[[Panel Stack Splitter 解説]]

*初めに [#lfae7ed4]
**流れ [#u231cc43]
+必要なものをインストール
+更に欲しい機能を提供するコンポーネントをインストール
+Columns UIで各種コンポーネントを配置し理解
+デザインの構想を練る
+PSS/ELPlaylistでTFと格闘

**TIPS [#h76cb89d]
***カスタマイズの例を見てみたい [#l70f3951]
-[[DeviantArt foobar2000:http://www.deviantart.com/#catpath=customization/skins/media/foobar2000]]
-[[Uploader:http://foobar2000.xrea.jp/up/]]

***背景とかボタンとか作れないんだけど [#w68820f4]
-ライブラリから拝借(ライセンスを確認すること)
--[[Tango:http://tango.freedesktop.org/Tango_Desktop_Project]]
--[[Silk:http://www.famfamfam.com/lab/icons/silk/]]
--[[Crystal Clear:http://www.everaldo.com/crystal/]]
-自作
--GIMP
--Paint.NET

*Columns UI(CUI) [#o7b60675]
**概要 [#p5824283]
コンポーネントが提供するパネルを配置するUI
**基本操作 [#meb0a3e1]
foobar2000の設定画面(Preferences)内のDisplay項目のUser Interface Moduleを
ドロップボックスをクリックしてColumns UIに変更、foobar2000を再起動します。
Columns UI(以下CUI)は、パネルの配置でレイアウトを変更するUIです。
設定画面のDisplay-Columns UIのLayoutタブでパネルの配置を行います。

**コンポーネント [#fb9ead63]
[[User interface]]から探す。
foobar2000はライブラリ指向。各機能でそれぞれ1個選ぶ。勿論複数でもかまわないが。
-最低限
--プレイリストの表示と管理
---Columns Playlist(CUIのデフォルト)
---NG Playlist(CUIに同梱)
---ELPlaylist(下記で解説)
--プレイリストの切り替え
---Playlist Switcher(CUIに同梱)
---Playlist Dropdown
--ライブラリの管理
---Album list
---Filter(CUIに同梱)
---Music Browser
---Playlist Tree
---Explorer Tree(非ライブラリ指向)
-必要なら
--歌詞の表示

*PSS/ELPL 共通事項 [#f75fdd0c]
-カバー画像を表示
--基本
---アルバムと同じフォルダにあるアルバムジャケット(ファイル名cover.png,cover.jpgなどcover.*)を
座標(0,0)の位置に(150,150)のサイズで表示
 $puts(coverPath,$findfile($replace(%path%,%filename_ext%,cover.*)))
 $drawimage(0,0,150,150,$get(coverPath),nokeepaspect)
これ見てぱっと意味がわからない場合、上記の資料見て理解してください。
説明はきちんと記載されているので理解できるはずです。
わかる気ないけどとりあえず反射したいとかいうのは愚の骨頂です。
$findfile(),$drawimage()はPSS/ELPLのTFですので各readme.txtかPSS解説を参照。

--装飾
---RGB(255,255,255)の背景で反射
 $puts(coverPath,$findfile($replace(%path%,%filename_ext%,cover.*)))
 $drawimage(0,0,150,150,$get(coverPath),nokeepaspect)
 $imageabs_rc(150,150,0,75,150,75,0,150,$get(coverPath),nokeepaspect,6,)
 $gradientrect(0,150,150,75,255-255-255-0,255-255-255-255,vertical)
PSS,ELPLのTFの引数に色指定のAがある場合、透明度を指定できます(0=透明、255=不透明)。

--一歩先行く
---フォルダを再帰検索し、最初に見つかった画像をPNG>JPGの優先度で表示(要foo_func.dll)
 $if($get(coverPath),,$puts(coverPath,$files_ex(0,$replace(%path%,%filename_ext%,),*.png)))
 $if($get(coverPath),,$puts(coverPath,$files_ex(0,$replace(%path%,%filename_ext%,),*.jpg)))

---ジャケットの種類を判断して表示(要foo_func.dll)
 $ifgreater($calc($getimageinfo($get(coverPath),height)*1.75),$getimageinfo($get(coverPath),width),
 //正方形(表のみのジャケット)
 $puts(coverSize,150)
 ,
 //横長の矩形(表裏ジャケット)
 $puts(coverSize,300)
 )
 $drawimage(0,0,$get(coverSize),150,$get(coverPath),nokeepaspect)
横が縦の1.75倍より大のとき横長と判断。

*PSS [#v885e86b]
**概要 [#d352793e]
TFでデザイン可能な高機能Splitter
**使い方 [#o5bab4d1]
+CUI LayoutタブでルートをPanel Stack Splitterにしてその隷下に表示するコンポーネントを置く
+Splitter Settingsより詳細なパネル配置を行う
-基本的にはforced layoutにチェックを入れ座標を固定する
-座標指定にはTFを使うことができる
+Splitter SettingsよりTFを入力し、カスタマイズ
**TIPS [#u53a7c73]
-プログレスバー
--表示のみ
 // 幅
 $puts(PB_W,200)
 $puts(PB_P,$muldiv($get(PB_W),%_time_elapsed_seconds%,%_time_total_seconds%))
 // PB_P<1のとき表示が変になるので1にする
 $ifgreater(1,$get(PB_P)),$puts(PB_P,1),)
 // 表示
 $drawrect(0,0,$get(PB_W),20)
 $drawrect(0,0,$get(PB_P),20)
演奏した長さ/全体の長さでどれだけ演奏したかの割合が求まるので、それにプログレスバーの長さを乗算すると位置が出ます。

--シークバーとして動作するようにする(要foo_uie_powerpanels.dll)
~Seek Panelを被せる(上記例では0,0,200,20)

*ELPL [#x1a691fd]
**概要 [#uea86a38]
SCPL Likeなグループヘッダ指向のプレイリスト
パネル右クリック->Settings...より設定
**設定ウィンドウ [#z2015cc8]
-script
~TFを入力する
--Track list
--Group Header
--Per Second
--Popup(Background)
--Popup(Track)
-style
-grouping
~グループ化の設定。定義を何種類か作っておくと便利。
ソートは表示上のもので、実際の順序は保持される。
グループ化したくない場合、row number of group numberを0にする。
-field definition
~TFのプリプロセッサとして動作。
-behaviour
-misc

**TIPS [#e61e7b30]
-互い違いで色を変えたい
 $ifequal($mod(%list_index%,2),0,偶数行,奇数行)