Example (PopupMenu): change and restore playlists.
foo_playcount is required to view the history and new.
// Use with MenuManager()
// {{
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_up(x, y, mask) {
switch_playlist_menu(x, y);
return true;
}
function isQueuePlaylistPresent() {
for (var i = 0; i < plman.PlaylistCount; i++) {
if (plman.GetPlaylistName(i) == "Queue Content") {
return i;
}
}
return -1;
}
function isLibraryPlaylistPresent() {
for (var i = 0; i < plman.PlaylistCount; i++) {
if (plman.GetPlaylistName(i) == "Library") {
return i;
}
}
return -1;
}
function isHistoryPlaylistPresent() {
for (var i = 0; i < plman.PlaylistCount; i++) {
if (plman.GetPlaylistName(i) == "History") {
return i;
}
}
return -1;
}
function isNewPlaylistPresent() {
for (var i = 0; i < plman.PlaylistCount; i++) {
if (plman.GetPlaylistName(i) == "New") {
return i;
}
}
return -1;
}
function ShowPlaylistQueue(focus_id) {
var total_pl = plman.PlaylistCount;
var queue_pl_idx = isQueuePlaylistPresent();
if (queue_pl_idx < 0) {
plman.CreatePlaylist(total_pl, "Queue Content");
queue_pl_idx = total_pl;
plman.ActivePlaylist = queue_pl_idx;
} else {
plman.ActivePlaylist = queue_pl_idx;
fb.ClearPlaylist();
};
var queue_total = plman.GetPlaybackQueueCount();
var vbarr = plman.GetPlaybackQueueContents();
var arr = vbarr.toArray();
var q_handlelist = plman.GetPlaylistSelectedItems(queue_pl_idx);
q_handlelist.RemoveAll();
for (var i = 0; i < queue_total; i++) {
q_handlelist.Add(arr[i].Handle);
};
plman.InsertPlaylistItems(queue_pl_idx, i, q_handlelist, false);
plman.SetPlaylistFocusItem(queue_pl_idx, focus_id);
}
function RenamePL(idx) {
fb.ActivePlaylist = idx;
fb.RunMainMenuCommand("File/Rename Playlist");
}
function switch_playlist_menu(x, y) {
var p = window.CreatePopupMenu();
var pr = window.CreatePopupMenu();
var act = plman.ActivePlaylist;
var ply_act = plman.PlayingPlaylist;
var prm = plman.PlaylistRecyclerManager;
var pl_count = plman.PlaylistCount;
p.AppendMenuItem(MF_STRING, 2000, "New playlist");
p.AppendMenuItem(MF_STRING, 895, "Autoplaylist...");
p.AppendMenuItem(MF_STRING, 2001, "Load playlist...");
if (pl_count >= 2) {
p.AppendMenuItem(MF_SEPARATOR, 0, 0);
for (var i = 0; i < pl_count; i++) {
if (plman.GetPlaylistName(i) != "New" && plman.GetPlaylistName(i) != "History" && plman.GetPlaylistName(i) != "Queue Content" && plman.GetPlaylistName(i) != "Library") {
var np = i == plman.PlayingPlaylist ? " (playing)" : "";
//var ap = fb.IsAutoPlaylist(i) ? "*" : "";
p.AppendMenuItem(MF_STRING, 2003 + i, plman.GetPlaylistName(i) + np);
try {
p.CheckMenuRadioItem(2003, 2003 + i, act + 2003);
} catch (e) {}
}
}
}
p.AppendMenuItem(MF_SEPARATOR, 0, 0);
p.AppendMenuItem(MF_STRING, 983, "Show Library" + (plman.GetPlaylistName(ply_act) == "Library" ? " (playing)" : ""));
p.AppendMenuItem(MF_STRING, 981, "Show New" + (plman.GetPlaylistName(ply_act) == "New" ? " (playing)" : ""));
p.AppendMenuItem(MF_STRING, 980, "Show History" + (plman.GetPlaylistName(ply_act) == "History" ? " (playing)" : ""));
var q_count = plman.PlaylistItemCount(isQueuePlaylistPresent());
var count_plq = (q_count > 0 ? " - " + q_count + (q_count > 1 ? " songs" : " song") : "");
p.AppendMenuItem(plman.IsPlaybackQueueActive() ? MF_STRING : MF_GRAYED | MF_DISABLED, 982, "Show Queue" + count_plq);
var pl_prd = plman.GetPlaylistName(act) == "New" ? 981 : plman.GetPlaylistName(act) == "History" ? 980 : plman.GetPlaylistName(act) == "Queue Content" ? 982 : plman.GetPlaylistName(act) == "Library" ? 983 : false;
p.CheckMenuRadioItem(980, 983, pl_prd);
p.AppendMenuItem(MF_SEPARATOR, 0, 0);
pr.AppendTo(p, prm.Count >= 1 ? MF_STRING : MF_GRAYED | MF_DISABLED, "Restore");
if (prm.Count >= 1) {
for (var irm = 0; irm < prm.Count; irm++) {
pr.AppendMenuItem(MF_STRING, 3001 + irm, prm.Name(irm));
}
}
var ret = p.TrackPopupMenu(x, y);
if (ret < 1000) {
switch (ret) {
case 980:
var total_pl = plman.PlaylistCount;
var history_pl_idx = isHistoryPlaylistPresent();
if (history_pl_idx < 0) {
fb.ActivePlaylist = fb.CreateAutoPlaylist(fb.PlaylistCount, "History", "%last_played% DURING LAST 1 DAY SORT DESCENDING BY %last_played%", "", true);
history_pl_idx = total_pl;
plman.ActivePlaylist = history_pl_idx;
} else {
plman.ActivePlaylist = history_pl_idx;
fb.ClearPlaylist();
}
break;
case 981:
var total_pl = plman.PlaylistCount;
var new_pl_idx = isNewPlaylistPresent();
if (new_pl_idx < 0) {
fb.ActivePlaylist = fb.CreateAutoPlaylist(fb.PlaylistCount, "New", "%added% DURING LAST 1 WEEK SORT DESCENDING BY %added%", "", true);
new_pl_idx = total_pl;
plman.ActivePlaylist = new_pl_idx;
} else {
plman.ActivePlaylist = new_pl_idx;
fb.ClearPlaylist();
}
break;
case 982:
ShowPlaylistQueue(0);
break;
case 983:
var total_pl = plman.PlaylistCount;
var library_pl_idx = isLibraryPlaylistPresent();
if (library_pl_idx < 0) {
fb.ActivePlaylist = fb.CreateAutoPlaylist(fb.PlaylistCount, "Library", "%path% PRESENT");
library_pl_idx = total_pl;
plman.ActivePlaylist = library_pl_idx;
} else {
plman.ActivePlaylist = library_pl_idx;
fb.ClearPlaylist();
}
break;
case 895:
fb.ActivePlaylist = fb.CreateAutoPlaylist(fb.PlaylistCount, "", "");
RenamePL(fb.ActivePlaylist);
fb.ShowAutoPlaylistUI(fb.ActivePlaylist);
break;
}
} else {
switch (ret) {
case 2000:
fb.RunMainMenuCommand("File/New playlist");
break;
case 2001:
fb.RunMainMenuCommand("File/Load playlist...");
break;
default:
plman.ActivePlaylist = (ret - 2003);
}
}
if (ret > 3000) {
switch (ret) {
default:
(prm.Count >= 1) && prm.Restore(ret - 3001);
}
}
p.Dispose();
pr.Dispose();
return true;
}