foobar2000のwsh panel modのサンプルコードその5



Wsh Panel Modをいぢろう最終回は『ドロップダウン型ボタン』です。
私のことは嫌いでも、foobar2000は嫌いにならないでください!!



さて、スベったところでsample7.txtです。
アクティヴなプレイリストから曲名を拾い出してメニューにし、選択された曲を演奏する、というボタンです。


// ==PREPROCESSOR==
// @name "Sample7 Dropdown Menu"
// @author "Junya Renno"
// ==/PREPROCESSOR==

//
var imgpath = fb.ProfilePath+"/skin/sample/";

var MF_SEPARATOR = 0x00000800;
var MF_ENABLED = 0x00000000;
var MF_GRAYED = 0x00000001;
var MF_DISABLED = 0x00000002;
var MF_UNCHECKED = 0x00000000;
var MF_CHECKED = 0x00000008;
var MF_STRING = 0x00000000;
var MF_POPUP = 0x00000010;
var MF_RIGHTJUSTIFY = 0x00004000;
//==========
function on_mouse_lbtn_down(x, y) {
var _menu = window.CreatePopupMenu();
var ret;

var handles = plman.GetPlaylistItems(plman.ActivePlaylist);
var count = plman.PlaylistItemCount(plman.ActivePlaylist);

for(var i=0; i<count; i++){
var pl_title= fb.TitleFormat("%title%").EvalWithMetadb(handles.item(i))
_menu.AppendMenuItem(MF_STRING, i+1, pl_title);
}
ret = _menu.TrackPopupMenu(x, y);
if (ret>0){
plman.ExecutePlaylistDefaultAction(plman.ActivePlaylist,ret-1)
}
_menu.Dispose();
}

function on_paint(gr){
var dropdown = gdi.Image(imgpath+"button_sample_1.png");
gr.DrawImage(dropdown,0,0,dropdown.Width,dropdown.Height,0,0,dropdown.Width,dropdown.Height);
}

Image_computer/wsh_9.png


var MF_SEPARATOR = 0x00000800;
var MF_ENABLED = 0x00000000;
var MF_GRAYED = 0x00000001;
var MF_DISABLED = 0x00000002;
var MF_UNCHECKED = 0x00000000;
var MF_CHECKED = 0x00000008;
var MF_STRING = 0x00000000;
var MF_POPUP = 0x00000010;
var MF_RIGHTJUSTIFY = 0x00004000;


ここらへんは定数を定義してるだけです。
『こういうもんだ』と思ってください。


var _menu = window.CreatePopupMenu();

メニューのベースになるオブジェクトを作ります。


var handles = plman.GetPlaylistItems(plman.ActivePlaylist);
var count = plman.PlaylistItemCount(plman.ActivePlaylist);

アクティブなプレイリストに対して、操作オブジェクトと曲数をあらかじめ問い合わせておきます。


for(var i=0; i<count; i++){
var pl_title= fb.TitleFormat("%title%").EvalWithMetadb(handles.item(i))
_menu.AppendMenuItem(MF_STRING, i+1, pl_title);
}

ループで回して、メニューのオブジェクトに対して項目を追加していきます。


ret = _menu.TrackPopupMenu(x, y);

retにメニューで選択された値が返ります。

if (ret>0){
plman.ExecutePlaylistDefaultAction(plman.ActivePlaylist,ret-1)
}
_menu.Dispose();

ret=0の場合、「何も選択されなかった」という意味なので何もしません。
ret>0であれば、retの値に即した曲を再生します。
終わったメニューオブジェクトは破棄します。


プレイリスト回りはちょっとややこしいんですが、

●fb.GetPlaylistName(idx)
プレイリストの名前
●plman.PlaylistItemCount(idx)
プレイリストの曲数
●plman.GetPlayingItemLocation().PlaylistItemIndex
プレイリストのうち、いま演奏している曲の順番

あと何かいるっけ。
私自身あまりプレイリスト使わないから適切な使用法って思いつかないんですよねえ。


あとは根性があればスキンぐらい作れるさ!(適当)


終わりマース。
 
*2016/02/17追記:foobar2000のwsh panel modのサンプルコード再び(その6) {+ foobar2000::カスタマイズ}
 

コメントは日本語でお願いします。(URLは入力禁止:Do not URL writing.) :System message: コメントを受けつけています。