#contents

*これ何? [#u5a8f7c9]

Library Filter は Media Library を探索し、編成するためのユーザーインタフェースです。
Library Filter はあなたが望むようにツリーの構成を定義し、Single Column Playlist (以下SCP) の列を書式設定するのと同様の方法で列を定義することができます。
SCP 上で Library Filter を使う主な利点は、一つの長いプレイリストをスクロールする代わりに素早くより大きなカテゴリーをスクロールし、サブカテゴリーが見られることなどです。
Library Filter は $panel() 関数を使うか、POPUP:library.pp コマンドで別のウィンドウを使うことによって関連付けることができます。

Library Filter は2つの異なる場所から設定できます。一つは main preferences menu (Preferences -> Display -> Panels UI -> Library Filter) で、もう一つは "Layout Filter Display" の "configuration window" (Library Filter のパネル上で右クリック -> settings) です。
ツリーの構造の法則は "preferences menu" で、表示スタイルは "Layout Filter Display" の "configuration window" で定義できます。

**"Library Filter" Preferences menu [#kd402d02]

トップレベルのヘッダーは一番上の "New" ボタンで追加することができる。また、右の "Up" ボタンや "Down" ボタンで表示される並び順を設定することができる。
新しいトップレベルのヘッダーを追加したとき、"New" ボタンの下の小さなパネルの中で判定基準ができる。
最も下のパネルでテキストを変えると、トップレベルのヘッダーの名前がすぐに変わる。あらかじめ定義されているレイアウトは、左の "Spec" の見出しの下の "Display" ボタンで変えることができる。

また、トップレベルの下のレベルのあなたが定義したヘッダーも追加することができる。このとき、トップレベルヘッダーではないので、最も下のパネルにツリー構造において次のレベルをグループ化するのに使われる基準を入力する。
ツリー構造は常にこの基準によってグループ化され、ソートされる。

**"Layout Filter Display" configuration window [#mfdd1de1]

Layout Filter Display は実際に列に表示されるものを定義する。もしあなたがそう望むなら、ツリー構造を組織するのに使われるテキストとは全く異なったテキストを表示することができる。
上のドロップダウンボックスで、あらかじめ定義されているレイアウトを変更することができる。基本的に、SCP で機能する関数ならなんでも機能し、さらにいくつかの別の記述も使うことができる。

新しいレイアウトは "New" ボタンで追加できる。"row height" は "Display Options" の下の "Item Height" によって調整できる。
この "row height" はそのレイアウトを使うときはいつでも使われる。つまり、異なった "row height" を使いたければ別のレイアウトを使わなければならない。

今のところ、背景色の設定は機能しない。そして背景は常に透明である。なので、回避方法として下 (Panels UI のレイアウトメニュー) で長方形を好みの色で作成しておけばよい。

**Library Filter Functions and constants [#p2aed677]

:%criteria%|
"Layout Filter Display" の "configuration window" で使う。これは "Library Filter" の "preferences menu" で定義された基準をそのまま表示させる。
たとえば、preferences menuで
 [%tracknumber% - ]%title%
と記述し、cofigration windowで
 %criteria%
と記述したとき、実際のレイアウト時にも
 [%tracknumber% - ]%title%
が使われる。
グループ化&ソートでは%tracknumber%、%title%の順で行いたいが、実際のレイアウトではトラックナンバーを表示させたくない場合、%criteria%を使わなければよい。
:%_subidx%|
ノードのレベル
 -Artist              :レベル0
   -Peter             :レベル1
     -Dools           :レベル2
        01 - Intro    :レベル3
        02 - Dolls    :レベル3
        03 - Dreaming :レベル3
:%_maxidx%|
レベルの数
 -Genre            :レベル数1
    Anime          :レベル数1
    Pop            :レベル数1
 -Artist           :レベル数3
   -Peter          :レベル数3
     -Dolls        :レベル数3
        01 - Intro :レベル数3
        02 - Dolls :レベル数3
 -Album            :レベル数2
   -Dolls          :レベル数2
      01 - Intro   :レベル数2
      02 - Dolls   :レベル数2
:%_itemindex%|
カレントの項目のインデックス
:%_itemcount%|
同じレベルでの項目の数
:%trackcount%|
選択されたノードのトラック数
:%childcount%|
子ノードの数 (親ノードが一度展開されれば有効になる) 
:%_expanded%|
展開/縮小可能なとき、展開可能なら有効
:%selected%|
SCP で使われる %selected% と同じ

**基本的な使い方 [#s7c2bd59]

preferences menu ではツリー構造の設定、configuration window ではデザインの設定を行う。
preferences menu でも Spec ボタンの下の Display ボタンでデザインの設定が行えるが、ツリーの性質、メンテナンス性を考えると望ましくない。

まず、適当なツリーを以下に示す。
 -Artist
    -Mr. Children
       -HOME
          01 叫び 祈り
          02 Wake me up!
          ...
       -シフクノオト
          01 言わせてみてぇもんだ
          02 PADDLE
          ...
    -宇多田ヒカル
       -Distance
          01 Wait & See ~リスク~
          ...
 -Date
    -2007
       ...

これを一般化すると、以下のようになる。
 -Artist
    -%Artist%
       -%album%
          -%tracknumber% %title%
 -Date
    -%date%
       ...

以下ではこのツリーの作成手順を説明する。まずヘッダーを作成する。ヘッダーとは木構造でいう根に当たる部分で、最上位のノードである。
このヘッダーは Preference menu の New ボタンで作成することができる。真ん中のエディター部に「Root」という文字が現れるので、これを任意のヘッダー名 (上のツリーでは Artist) に書き換える。

次にヘッダーの次のレベル (レベル1) のノードを作成する。これは上のツリーの Mr. Children や宇多田ヒカルの部分である。
Preference menu 上でドロップダウンメニューから先ほど作成したヘッダー (Artist) を選び、右の Add ボタンを押すと add ボタンの左のウィンドウに次のレベルのノードが現れる。
真ん中のエディタ部はデフォルトでは「%album%」と表示されるが、ここを
 %artist%
と書き換えるとアーティスト順にグループ化、そしてソートされる。この場合、%artist% でソートしているので abcd… の順番で表示されることになる。
上のツリーを例にすると「Mr. Children、宇多田ヒカル」の順に表示されるが、「宇多田ヒカル、Mr. Children」と表示されることはない。

次にレベル2のノードを作成する。レベル2では、レベル1でアーティスト毎にグループ化したノードを、さらにアルバム毎にグループ化する。
レベル1のノードを作成したのと同様の方法で新しいノードを作成する。エディタ部に「%album%」と入力すればアルバム名毎にグループ化される。
これも表示される際にはアルバム名でソートされるので、たとえばアルバムを年代順にソートしたい場合にはエディタ部に
 %date% - %album%
と記述しておけば年代順にソートされる。(スペースやハイフンは実際には必要ない)
ただしこのときグループ化にも影響があり、%date% と %album% が一致する曲がグループ化されるので、同じアルバム内の曲でも年代のメタデータを入力してない曲があればその曲はグループ化されない。

注意として、ソートはエディタ部の左に書くほどソートの優先順位があがる。たとえば「%album% - %date%」と記述するとアルバム名によるソートの優先順位が高いので、上のツリーの例では「Home」、「シフクノオト」の順に表示される。
「 %date% - %album%」と記述した場合には年代によるソートの優先順位が高いので、先に発売された「シフクノオト」が先に表示される。

最後にレベル3のノードを作成する。ここではアルバム毎にグループ化された曲を1曲ずつ表示させる。これまでと同様の方法でノードを作成し、エディタ部に
 %title%
と記述すればタイトルが同じ曲でグループ化 (つまり1曲ずつ表示) される。ただし、%title% だけでは曲名順に表示されるので、トラック順に表示したい場合には
 [%tracknumber% - ]%title%
と記述 (順番に注意!) する。さらにディスク毎にも表示させたい場合には
 [%discnumber% - ][%tracknumber% - ]%title%
と記述 (順番に注意!!) する。この場合の優先順位はディスクナンバー、トラックナンバー、曲名となる。

ここまでがツリーの作成法の説明である。Artist のツリーの説明しかしていないが、Date のツリーも同様の方法で作成できる。

次にデザインの説明をする。ツリーの性質として、ツリーが複数ある場合にもヘッダーはヘッダーのデザイン、曲には曲のデザイン、他のノードは共通のデザインという風に統一させたい。

まず、ヘッダーのデザインを行う。Layout Filter 上で右クリック -> settings で configuration window を開く。
Display Formats 部でデザインを複数作ることができるので、New ボタンを押して新しいデザインの名前 (ここでは Header とする) を入力し、作成する。Display Settings でヘッダー部のデザインを記述する。

デザインを作成したら、Preference menu 上でドロップダウンメニューからヘッダー (例えば Artist) を選び、その下の一番上のヘッダーを選んでCriteria の Display ボタンを押す。
ここで「!FROMLAYOUT!:Header」と記述しておけば、先ほど作った「Header」という名前のデザインが適用される。
 !FROMLAYOUT!:Header
と書かずに直接デザインを記述してもよいが、全てのヘッダーに対して同じことをしなければならないのでよくない。
基本的には configuration window 上でヘッダー用、曲用、その他のノード用、といったようにデザインを複数作り、Preference menu で
 !FROMLAYOUT!:デザイン名
と指定するのが便利である。

Item Rows は1項目の高さであり、Preference menu からも configuration window からも設定できるが、「!FROMLAYOUT!:デザイン名」のようにデザインを指定している場合にはconfiguration window が優先され、Preference menu で直接デザインを記述しており「!FROMLAYOUT!:デザイン名」の記述がない場合、Preference menu の Item Rows の値が使われる。

**FAQ [#q370568b]

***$puts(xOffset,$eval(%_subidx%*20))ってなに [#e86b90f5]

レベル毎にオフセットを設定している。レベルが上がるごとに20ずつオフセット

***$ifequal(%_maxidx%,%_subidx%,A,B)ってなに [#abf33552]

末端のノードの判定。%_maxidx% と %_subidx% が等しくなるのは葉のみ、よって
-A : それ以上展開できない (子ノードが存在しない) ときの処理
-B : まだ展開できる (子ノードが存在する) ときの処理
となる。デフォルトでは1つのレイアウトで処理しているのでこれを使っている。末端のノードのレイアウトを別に作って指定しておけば必要ない。

***フォントのサイズ、色がたまに変わる [#zd1e3125]

レイアウト毎にフォントをしっかり指定しておけば大丈夫なはず