winamp/Src/nu/SendTo.h
2024-09-24 14:54:57 +02:00

107 lines
2.7 KiB
C++

#ifndef NULLSOFT_SEND_TO_HELPER_CLASS_H
#define NULLSOFT_SEND_TO_HELPER_CLASS_H
#include "../gen_ml/ml_ipc.h"
#include "../gen_ml/ml.h"
#include "../winamp/wa_ipc.h"
class SendToMenu
{
public:
SendToMenu(winampMediaLibraryPlugin &_plugin) : IPC_LIBRARY_SENDTOMENU(0), plugin(&_plugin)
{
memset(&sendTo, 0, sizeof(sendTo));
}
void AddHere(HWND hwnd, HMENU hMenu, int type)
{
sendTo.mode = 0;
sendTo.hwnd = 0;
sendTo.build_hMenu = 0;
IPC_LIBRARY_SENDTOMENU = SendMessage(plugin->hwndWinampParent, WM_WA_IPC, (WPARAM)&"LibrarySendToMenu", IPC_REGISTER_WINAMP_IPCMESSAGE);
if (IPC_LIBRARY_SENDTOMENU > 65536 && SendMessage(plugin->hwndWinampParent, WM_WA_IPC, (WPARAM)0, IPC_LIBRARY_SENDTOMENU) == (LRESULT)-1)
{
sendTo.mode = 1;
sendTo.hwnd = hwnd;
sendTo.data_type = type; //ML_TYPE_ITEMRECORDLIST;
sendTo.build_hMenu = hMenu;
}
}
bool WasClicked(int popUpReturnVal)
{
if (sendTo.mode == 2)
{
sendTo.menu_id = popUpReturnVal;
if (SendMessage(plugin->hwndWinampParent, WM_WA_IPC, (WPARAM)&sendTo, IPC_LIBRARY_SENDTOMENU) == (LRESULT)-1)
return true;
}
return false;
}
void Cleanup()
{
if (sendTo.mode)
{
sendTo.mode = 4;
SendMessage(plugin->hwndWinampParent, WM_WA_IPC, (WPARAM)&sendTo, IPC_LIBRARY_SENDTOMENU); // cleanup
}
sendTo.build_hMenu = 0;
}
bool InitPopupMenu(WPARAM wParam)
{
if (wParam && (HMENU)wParam == sendTo.build_hMenu && sendTo.mode == 1)
{
if (SendMessage(plugin->hwndWinampParent, WM_WA_IPC, (WPARAM)&sendTo, IPC_LIBRARY_SENDTOMENU) == (LRESULT)-1)
sendTo.mode = 2;
return true;
}
return false;
}
// still need to free it on your own
void SendItemRecordList(itemRecordList *obj)
{
sendTo.data_type = ML_TYPE_ITEMRECORDLIST;
sendTo.mode = 3;
sendTo.data = (void*) & obj;
SendMessage(plugin->hwndWinampParent, WM_WA_IPC, (WPARAM)&sendTo, IPC_LIBRARY_SENDTOMENU);
}
void SendFilenames(const char *filenames)
{
sendTo.data_type = ML_TYPE_FILENAMES;
sendTo.mode = 3;
sendTo.data = (void*)filenames;
SendMessage(plugin->hwndWinampParent, WM_WA_IPC, (WPARAM)&sendTo, IPC_LIBRARY_SENDTOMENU);
}
void SendFilenames(const wchar_t *filenames)
{
sendTo.data_type = ML_TYPE_FILENAMESW;
sendTo.mode = 3;
sendTo.data = (void*)filenames;
SendMessage(plugin->hwndWinampParent, WM_WA_IPC, (WPARAM)&sendTo, IPC_LIBRARY_SENDTOMENU);
}
LRESULT SendPlaylist(mlPlaylist *playlist)
{
sendTo.data_type = ML_TYPE_PLAYLIST;
sendTo.mode = 3;
sendTo.data = (void*)playlist;
return SendMessage(plugin->hwndWinampParent, WM_WA_IPC, (WPARAM)&sendTo, IPC_LIBRARY_SENDTOMENU);
}
private:
LRESULT IPC_LIBRARY_SENDTOMENU;
librarySendToMenuStruct sendTo;
winampMediaLibraryPlugin *plugin;
};
#endif