Initial community commit
This commit is contained in:
90
Src/Plugins/Library/ml_playlists/wa_subclass.cpp
Normal file
90
Src/Plugins/Library/ml_playlists/wa_subclass.cpp
Normal file
@@ -0,0 +1,90 @@
|
||||
#include "main.h"
|
||||
#include "../Winamp/wa_ipc.h"
|
||||
#include "replicant/nu/AutoLock.h"
|
||||
#include <algorithm>
|
||||
|
||||
using namespace Nullsoft::Utility;
|
||||
|
||||
static WNDPROC waProc = 0;
|
||||
extern HMENU wa_play_menu;
|
||||
static HMENU last_playlistsmenu = NULL;
|
||||
WORD waMenuID = 0;
|
||||
extern int IPC_LIBRARY_PLAYLISTS_REFRESH, IPC_CLOUD_ENABLED;
|
||||
|
||||
LRESULT WINAPI WinampProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (msg == WM_COMMAND || msg == WM_SYSCOMMAND)
|
||||
{
|
||||
if (LOWORD(wParam) == WINAMP_MANAGEPLAYLISTS)
|
||||
{
|
||||
mediaLibrary.ShowMediaLibrary();
|
||||
mediaLibrary.SelectTreeItem(playlistsTreeId);
|
||||
return 1;
|
||||
}
|
||||
else if (msg == WM_COMMAND && wParam > 45000 && wParam < 55000)
|
||||
{
|
||||
INT_PTR treeId = wParam - 45000;
|
||||
if (FindTreeItem(treeId))
|
||||
{
|
||||
mediaLibrary.SwitchToPluginView(treeId);
|
||||
}
|
||||
}
|
||||
else if (msg == WM_COMMAND && wParam > 55000 && wParam < 65000)
|
||||
{
|
||||
if (PlayPlaylist(wParam - 55000))
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if (msg == WM_INITMENUPOPUP)
|
||||
{
|
||||
HMENU hmenuPopup = (HMENU) wParam;
|
||||
if (hmenuPopup == wa_play_menu)
|
||||
{
|
||||
if (last_playlistsmenu)
|
||||
{
|
||||
RemoveMenu(wa_play_menu, waMenuID, MF_BYCOMMAND);
|
||||
DestroyMenu(last_playlistsmenu);
|
||||
last_playlistsmenu = NULL;
|
||||
}
|
||||
mlGetTreeStruct mgts = { 3001, 55000, -1};
|
||||
last_playlistsmenu = (HMENU)SendMessage(plugin.hwndLibraryParent, WM_ML_IPC, (WPARAM) &mgts, ML_IPC_GETTREE);
|
||||
if (last_playlistsmenu)
|
||||
{
|
||||
MENUITEMINFOW menuItem = {sizeof(MENUITEMINFOW), MIIM_SUBMENU | MIIM_ID | MIIM_TYPE, MFT_STRING,
|
||||
MFS_ENABLED, waMenuID, last_playlistsmenu, NULL, NULL, NULL,
|
||||
WASABI_API_LNGSTRINGW(IDS_PLAYLIST_FROM_ML), 0};
|
||||
// if there's no playlists then let the user know this
|
||||
if(!AGAVE_API_PLAYLISTS->GetCount())
|
||||
{
|
||||
wchar_t buf[64] = {0};
|
||||
DestroyMenu(last_playlistsmenu);
|
||||
menuItem.hSubMenu = last_playlistsmenu = CreateMenu();
|
||||
InsertMenuW(menuItem.hSubMenu, 0, MF_BYPOSITION | MF_STRING | MF_GRAYED, 0, WASABI_API_LNGSTRINGW_BUF(IDS_NO_PLAYLIST_IN_LIBRARY,buf,64));
|
||||
}
|
||||
InsertMenuItemW(wa_play_menu, GetMenuItemCount(wa_play_menu), TRUE, &menuItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (msg == WM_WA_IPC && lParam == IPC_LIBRARY_PLAYLISTS_REFRESH)
|
||||
{
|
||||
// refresh the status of the tree items e.g. when made
|
||||
// being made into a cloud playlist or remove from it
|
||||
UpdatePlaylists();
|
||||
}
|
||||
else if (msg == WM_WA_IPC && lParam == IPC_CLOUD_ENABLED)
|
||||
{
|
||||
cloud_avail = 1;
|
||||
if (IsWindow(currentView)) PostMessage(currentView, WM_APP + 102, 0, 0);
|
||||
}
|
||||
|
||||
if (waProc)
|
||||
return CallWindowProcW(waProc, hwnd, msg, wParam, lParam);
|
||||
else
|
||||
return DefWindowProc(hwnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
void Hook(HWND winamp)
|
||||
{
|
||||
if (IsWindow(winamp))
|
||||
waProc = (WNDPROC)SetWindowLongPtrW(winamp, GWLP_WNDPROC, (LONG_PTR)WinampProcedure);
|
||||
}
|
||||
Reference in New Issue
Block a user