#author("2016-05-07T12:27:09+09:00","","")
#author("2023-03-15T17:47:09+09:00","","")
//0.5.4 beta [Jan  9 2007 - 15:42:59]
#contents

*これ何? [#ub0cf280]

Columns UI用のパネルを配置するためのsplitter。ボーダーなしや、パネルを重ねたりなど少しは自由度の高い設定が出来る。(Release.txtより)http://foo2k.chottu.net/で配布されている。
Columns UI用のパネルを配置するためのsplitter。ボーダーなしや、パネルを重ねたりなど少しは自由度の高い設定が出来る。(Release.txtより) http://foo2k.chottu.net/ で配布されている。

*導入方法 [#b7bf7f93]

foo_uie_panel_splitter.dllをcomponentsフォルダに入れ、Columns UIのLayoutタブでSplitter>Panel Stack Splitterを選択、配置する。

*操作方法 [#w0552265]

*設定 [#r26be706]
 
[[参考 Panel Stack Splitter (foo uie panel splitter) HA wiki:https://wiki.hydrogenaud.io/index.php?title=Foobar2000:Components_0.9/Panel_Stack_Splitter_%28foo_uie_panel_splitter%29]]
*関数 [#n9ee286d]

OPTIONSで複数の設定を指定する場合、区切り文字には半角スペースを使う。

**フォント [#m769d76c]

***$font() [#v3ccc129]
 $font(name,size,OPTIONS)
-name: フォント名
-size: フォントサイズ
-OPTIONS
--bold: 太字
--italic: 斜体
--underline: 下線
--strikeout: 打消し線

フォント設定
-例   $font(Tahoma,10,bold italic)

**描画 [#nf24a1ab]

***$drawstring() [#y2f97363]
 $drawstring(text,x,y,W,H,r-g-b-a,RESERVED)
-text: 描画する文字列
-r-g-b-a: 文字色(赤-緑-青-透明度)
-OPTIONS
--left: 左
--hcenter :中央
--right: 右
--top: 上
--vcenter: 中央
--bottom: 下
--nowrap: 描画の回り込みをしない
--noaa: アンチエイリアスをかけない(指定しなくてもかからないフォントもある)

文字列描画関数
-文字列はこの関数と$drawtext()でしか表示できない。
-textを座標(x,y)に出力
-TrueTypeフォントしか使えないかも。
-例  $drawstring(abcd,10,10,,,255-128-64-128,hcenter noaa)

***$drawrect() [#l6a9ee96]

 $drawrect(x,y,w,h,R1-G1-B1-A1,R2-G2-B2-A2,OPTIONS)
-R1-G1-B1-A1: 内部色
-R2-G2-B2-A2: 枠の色
-OPTIONS
--aa: アンチエイリアスをかける

矩形描画関数
-座標(x,y)にサイズ(w,h)で矩形を描画
-例  $drawrect(0,50,50,50,255-128-64-128,,aa)

***$gradientrect() [#n8546b65]

 $gradientrect(x,y,w,h,r1-g1-b1-a1,r2-g2-b2-a2,OPTIONS)
-r1-g1-b1-a1: グラデーション開始色
-r2-g2-b2-a2: グラデーション終了色
-OPTIONS
--vertical: 垂直方向
--horizontal: 水平方向
--aa: アンチエイリアスをかける

矩形内をグラデーションで塗りつぶす描画関数
-座標(x,y)にサイズ(w,h)で矩形を描画
-例  $gradientrect(0,50,50,50,255-128-64-128,255-255-255,vertical aa)

***$drawroundrect() [#s20153e2]

 $drawroundrect(x,y,w,h,w2,h2,R1-G1-B1-A1,R2-G2-B2-A2,RESERVED)
-R1-G1-B1-A1: 内部色
-R2-G2-B2-A2: 枠の色

角を丸めた矩形描画関数
-座標(x,y)にサイズ(w,h)で角を丸めた矩形を描画。角の丸みは、w2,h2で調整できる。w > 4*w2 && h > 4*h2 を満たす必要がある。
-例  $drawroundrect(10,20,50,50,4,4,255-255-128-255,,)

***$drawellipse() [#i9bb1864]

 $drawellipse(x,y,w,h,R1-G1-B1-A1,R2-G2-B2-A2,RESERVED)
-R1-G1-B1-A1  内部色
-R2-G2-B2-A2  枠の色
-楕円描画関数
-座標(x,y)にサイズ(w,h)で楕円を描画

**画像 [#sb1da9e8]

***$imageabs() [#z9b3548f]

 $imageabs(x,y,w,h,path,OPTIONS,n)
-path: 画像へのパス
-OPTIONS
--nokeepaspect: アスペクト比を維持しない
--left
--right
--top
--bottom
--nodisplay: メモリに読み込むだけで表示しない
--artreader: pathのファイルに埋め込まれている画像を表示する
-n: rotateflipのためのインデックス
--1: 90
--2: 180
--3: 270
--4: 左右反転 
--5: 90 + 左右反転 
--6: 上下反転 
--7: 90 + 上下反転 

座標(x,y)にサイズ(w,h)で pathで指定される画像を表示する。
最初にTFが評価されたとき(起動時など)のサイズ(w,h)にリサイズしてメモリ上にキャッシュする。
メモリ上にキャッシュした後で参照されなくなった画像は、速やかにメモリ上から削除される。
次に同じpathで画像が参照されれば、すべてメモリ上のリサイズ済み画像を使って表示する。
w,hが省略されると、オリジナルのサイズでキャッシュする。
メモリにキャッシュした画像については、$getimagewidth(path),$getimageheight(path)が使える。

この関数は、毎回画像ファイルをHDDに読みにいくことを回避したり、処理速度を上げる目的で使用する。
リサイズに関する処理が気にいらなければ、drawimageを使うこと。
普通はこっち使っておけば問題ないはず。

-例1  $imageabs(10,10,,,C:\%album%.jpg)
-例2  $imageabs(10,10,50,50,C:\%album%.jpg)
-例3  $imageabs(10,10,50,50,C:\%album%.jpg,left top)
-例4  $imageabs(10,10,50,50,C:\%album%.jpg,,6)
-例5  $imageabs(10,10,50,50,%_path%,artreader)

***$imageabs_rc() [#v18c9328]

 $imageabs_rc(rw,rh,srcx,srcy,srcw,srch,x,y,path,OPTIONS,n)
-path: 画像へのパス
-OPTIONS
--nokeepaspect: アスペクト比を維持しない
--nodisplay: メモリに読み込むだけで表示しない
-n: rotateflipのためのインデックス(imageabsと同じ)

リサイズ後クリップして画像を表示する関数。pathで指定される画像をサイズ(rw,rh)にリサイズ後に、その領域(srcx,srcy,srcw,srch)を座標(x,y)にサイズ(srcw,srch)で 表示する。

***$getimagewidth(), $getimageheight() [#ma389145]

 $getimagewidth(path), $getimageheight(path)
-path: 画像へのパス

pathで指定される画像が$imageabs $imageabs_rcもしくは $imagebuttonでメモリにキャッシュ中の画像であれば、そのリサイズ済みの水平幅、垂直幅を返す。

***$drawimage() [#b73c8020]

 $drawimage(x,y,w,h,path,OPTIONS,n)
-path: 表示する画像へのパス
-OPTIONS
--nokeepaspect: アスペクト比を維持しない
--left
--right
--top
--bottom
--artreader: pathのファイルに埋め込まれている画像を表示する
-n: rotateflipのためのインデックス
--1: 90
--2: 180
--3: 270
--4: 左右反転 
--5: 90 + 左右反転 
--6: 上下反転 
--7: 90 + 上下反転 

-座標(x,y)にサイズ(w,h)で path で指定される画像を表示
-wとhを省略するとオリジナルのサイズで表示する
-表示後処理後直ちにメモリ上から、削除される。TFが評価されるたびに画像の再読み込みを行う。
 
とてつもなく大きい画像を表示したり、画像を多く表示するのにメモリ占有量を減らしたかったりimageabsのリサイズ処理が気に入らない人向け。

**ファイル [#ta6f9cfb]

***$findfile() [#k841c1a4]
 $findfile(path)
-path: 存在を調べるファイルへのパス

path(ワイルドカード可)で指定されるファイルが存在すれば、最初に見つかったファイルのパスを返す。ファイルが無ければ何も返さない。

**座標 [#q5aa4de0]

***$setparcentmode() [#p9275f07]

 $setparcentmode(bx,by,bw,bh)

-bx: x座標指定モード
--0:Splitter内の絶対座標で指定するモード
--1:Splitterのサイズに対する相対値(パーセント値)での指定とする。
-by: y座標指定モード(同上)
-bw: w座標指定モード(同上)
-bh: h座標指定モード(同上)

座標の指定モードを設定する。ウィンドウの表示領域が(0,0) ~ (%_width%, %_height%)であるところを、パーセント値指定モードでは、(0,0) ~ (100,100)にマッピングする。
x,y,w,h個別に設定できる。x,y,w,hのいずれかを引数にもつ関数すべてに影響を及ぼす。

**ボタン [#pfc217a0]

***$textbutton() [#dc6bb077]

 $textbutton(x,y,w,h,text,mover_text,command,options1,options2)
-text: ボタンのラベル
-mover_text: マウスオーバー時のボタンのラベル
-command: 実行するコマンド
--COMMAND:command_path
 command_pathで指定されるメニューコマンドを実行する。
 COMMAND:View/Equalizerや、
 COMMAND:File/Preferences;COMMAND:Playback/Play
 というように指定する。
 command_pathもTFとして評価されるので注意
 COMMAND:'View/Equalizer'としておくのを推奨。
--CONTEXT:context_path
 context_pathで指定されるコンテキストメニューコマンドを実行する。
 コンテキストメニューの処理対象は現在の再生トラック。
 CONTEXT:Propertiesみたいに指定する。
 context_pathもTFとして評価されるので注意
--WINDOWSIZE:cx:cy
 ウィンドウサイズを(cx,cy)にする。
 Splitter風情が、ウィンドウサイズを変更していいかは微妙。
--PANELSHOW:cap:sh
 captionがcapである子パネルの表示/非表示を切り替える。
 sh
 0  非表示
 1  表示
 -1  表示/非表示のトグル
--TFMODE:mode
 Per Trackのtitleformatのモードを変更する。
 mode
 0  nowplayingモード
 1  follow curosrモード
 -1  トグル
--REFRESH
 TFのPerTrack, PerSecondを更新する。

-options1: デフォルトの装飾指定 (スペースで区切って複数指定可)
--fontcolor:r-g-b: テキストの色
--brushcolor:r-g-b-a: ボタン矩形の塗りつぶし色
--pencolor:r-g-b-a: ボタン外枠の色
--left top bottom right: テキストの位置
-options2: マウスオーバー時の装飾指定 (スペースで区切って複数指定可)
--fontcolor:r-g-b: テキストの色
--brushcolor:r-g-b-a: ボタン矩形の塗りつぶし色
--pencolor:r-g-b-a: ボタン外枠の色
--left top bottom right: テキストの位置

-コマンドは"命令種別:引数"の書式で指定する
--余分なスペースを入れないこと
-;で区切って複数命令指定可のつもり。指定できる命令がまだ少ない。すごく実装が面倒。。。
:や;はスプリッタ文字になっているので、これらの文字が含まれる引数は、上手くパース出来ない可能性がある。

-注意1:    処理時間のかかる命令を指定しないこと。
-注意2:    複数命令指定されている場合、命令の実行順序は保証されない。

特にCOMMANDとWINDOWSIZEが指定される場合、WINDOWSIZEの方がおそらく先に実行される。COMMAND,CONTEXT同士だと、順序が保証されるかも。

***$imagebutton() [#v0b91cfa]

 $imagebutton(x,y,w,h,path,mover_path,command,options1,options2)
-path: ボタンに使用する画像へのパス
-mover_path:マウスオーバー時のボタンに使用する画像へのパス
-command: 実行するコマンド
-options1 画像表示オプション
--nokeepaspect
--left top bottom right
-options2: マウスオーバー時の画像表示オプション
--nokeepaspect
--left top bottom right

画像ボタンを作る。Per Trackのみ有効。 Per Secondには記述しないこと。画像の内部処理としては$imageabsと扱いが等しく、メモリ上にキャッシュされる。
w,hが省略されると、pathで指定される画像のオリジナルサイズになる。commandはtextbuttonと共通。

**GDI描画 [#wa9cd607]

GDIで描画する。 シンプルだけど処理が軽い場合がある。(特にWindowsXP)

***$drawtext() [#t8559350]

 $drawtext(text,x,y,W,H,r-g-b,RESERVED)
-option
--left hcenter right
--top  vcenter bottom
--noclip

文字列描画関数
-textを座標(x,y)に出力

***$drawtextex() [#vd148071]

 $drawtextex(text,x,y,W,H,r-g-b,OPTIONS)
-OPTIONS
--left hcenter right:  水平アライン指定
--top  vcenter bottom: 垂直アライン指定
--noclip:              クリップしない
--wrap:                ラップアラウンド許可指定(vcenter、bottomとは排他)
--end_ellipsis:        テキストがクリップされる場合、テキストの最後を...に置き換える

GDI文字列描画関数2
-textを座標(x,y)に出力
-例 $drawtextex(text,0,0,%_width%,%_height%,0-0-0,hcenter vcenter end_ellipsis)

***$gettextwidth() [#e5b0c711]

 $gettextwidth(text)

GDIで描画したときのテキストの水平幅を返す。

***$gettextheight() [#k7ffee9c]

 $gettextheight()

GDIで描画したときのテキストの垂直幅を返す。

***$fillrect() [#ecdd2dcf]

 $fillrect(x,y,w,h,r-g-b,RESERVED)

矩形塗りつぶし関数

**パネル操作 [#s39a6973]

***$showpanel(),$showpanel_c() [#l1d49991]

 $showpanel(i,sh),$showpanel_c(caption,sh)
-i: 子パネルリストでの何番目か(0から数えて)
-caption: パネルキャプション名
-sh
--0: 非表示
--1: 表示

パネルの表示、非表示変更関数

***$movepanel(),$movepanel_c() [#wb18e4a2]

 $movepanel(i,x,y,w,h),$movepanel_c(caption,x,y,w,h) 
-i: 子パネルリストでの何番目か(0から数えて)
-caption: パネルキャプション名

Force layout指定されたパネルのみ、座標(x,y) サイズ(w,h)に移動させる。

***$getcaption() [#y26c17f9]

 $getcaption(i)
-i: 子パネルリストでの何番目か(0から数えて)

子パネルリストでのi番目パネルに設定されているキャプションを返す。

***$isvisible_c() [#r0695eac]

 $isvisible_c(caption)
-caption: パネルキャプション名

パネルの表示状態を返す。(表示されていれば真、非表示なら偽)