#ifndef MEDIALIBRARYINTERFACEH #define MEDIALIBRARYINTERFACEH #include #include #include "..\Plugins\General\gen_ml/ml.h" #include "../winamp/wa_ipc.h" #ifndef REPLICANT_COMPAT #include #endif class MediaLibraryInterface { public: MediaLibraryInterface() : httpRetrieveFile( 0 ) {} // children communicate back to the media library by SendMessage(plugin.hwndLibraryParent,WM_ML_IPC,param,ML_IPC_X); int AddTreeImage( int resourceId ); // returns index of the image. int AddTreeImage( int resourceId, int imageIndex, BMPFILTERPROC filter ); int AddTreeImageBmp( int resourceId ); void AddTreeItem( MLTREEITEM &newItem ); void AddTreeItem( MLTREEITEMW &newItem ); void SetTreeItem( MLTREEITEM &item ); void SetTreeItem( MLTREEITEMW &item ); void RemoveTreeItem( INT_PTR treeId ); void SelectTreeItem( INT_PTR treeId ); void UpdateTreeItem( MLTREEITEMINFO &newItem ); void UpdateTreeItem( MLTREEITEMINFOW &newItem ); INT_PTR GetSelectedTreeItem( void ); void RenameTreeId( INT_PTR treeId, const wchar_t *newName ); INT_PTR GetChildId( INT_PTR id ); INT_PTR GetNextId( INT_PTR id ); void AddToSendTo( char description[], INT_PTR context, INT_PTR unique ); void AddToSendTo( wchar_t description[], INT_PTR context, INT_PTR unique ); void BranchSendTo( INT_PTR context ); void AddToBranchSendTo( const wchar_t description[], INT_PTR context, INT_PTR unique ); void EndBranchSendTo( const wchar_t description[], INT_PTR context ); const char *GetIniDirectory(); const wchar_t *GetIniDirectoryW(); const char *GetWinampIni(); const wchar_t *GetWinampIniW(); void BuildPath( const wchar_t *pathEnd, wchar_t *path, size_t numChars ); int SkinList( HWND list ); void UnskinList( int token ); void ListViewShowSort( int token, BOOL show ); void ListViewSort( int token, int columnIndex, BOOL ascending ); void ListSkinUpdateView( int listSkin ); void OpenURL( const wchar_t *url ) { SendMessage( winamp, WM_WA_IPC, (WPARAM)url, IPC_OPEN_URL ); } int SkinComboBox( HWND comboBox ); void UnskinComboBox( int token ); void *GetWADLGFunc( int num ); #ifndef REPLICANT_COMPAT void PlayStreams( std::vector &urls, bool force = false ); #endif void PlayStream( wchar_t *url, bool force = false ); void PlayFile( const wchar_t *url ); void EnqueueFile( const wchar_t *url ); void EnqueueStream( wchar_t *url, bool force = true ); void GetFileInfo( const char *filename, char *title, int titleCch, int *length ); void GetFileInfo( const wchar_t *filename, wchar_t *title, int titleCch, int *length ); void ClearPlaylist() { SendMessage( winamp, WM_WA_IPC, 0, IPC_DELETE ); } void SwitchToPluginView( int itemId ) { SendMessage( library, WM_ML_IPC, itemId, ML_IPC_SETCURTREEITEM ); } int GetWinampVersion() { return (int)(INT_PTR)SendMessage( winamp, WM_WA_IPC, 0, IPC_GETVERSION ); } HWND library = 0; HWND winamp = 0; HINSTANCE instance = 0; const char *iniDirectory = 0; const wchar_t *iniDirectoryW = 0; const char *winampIni = 0; const wchar_t *winampIniW = 0; const char *pluginDirectory = 0; void AddPreferences( prefsDlgRec &prefs ) { SendMessage( winamp, WM_WA_IPC, (WPARAM)&prefs, IPC_ADD_PREFS_DLG ); } void AddPreferences( prefsDlgRecW &prefs ) { SendMessage( winamp, WM_WA_IPC, (WPARAM)&prefs, IPC_ADD_PREFS_DLGW ); } void InsertTreeItem( MLTREEITEM &newItem ); void InsertTreeItem( MLTREEITEMW &newItem ); char *GetProxy() { char *proxy = (char *)SendMessage( winamp, WM_WA_IPC, 0, IPC_GET_PROXY_STRING ); if ( proxy == (char *)1 || strlen(proxy) == 0 ) return 0; else return proxy; } void BuildPluginPath( const TCHAR *filename, TCHAR *path, size_t pathSize ); int ( *httpRetrieveFile )( HWND hwnd, const char *url, const char *file, const char *dlgtitle ); IDispatch *GetDispatchObject(); int GetUniqueDispatchId(); void ListSkinDisableHorizontalScrollbar( int listSkin ); void AddToMediaLibrary( const char *filename ); void AddToMediaLibrary( const wchar_t *filename ); void GoToPreferences( int id ) { SendMessage( winamp, WM_WA_IPC, id, IPC_OPENPREFSTOPAGE ); } void GoToPreferences( prefsDlgRec &prefs ) { SendMessage( winamp, WM_WA_IPC, (WPARAM)&prefs, IPC_OPENPREFSTOPAGE ); } void GoToPreferences( prefsDlgRecW &prefs ) { SendMessage( winamp, WM_WA_IPC, (WPARAM)&prefs, IPC_OPENPREFSTOPAGE ); } const char *GetFontName() { return (const char *)SendMessage( winamp, WM_WA_IPC, 1, IPC_GET_GENSKINBITMAP ); } int GetFontSize() { return (int)SendMessage( winamp, WM_WA_IPC, 3, IPC_GET_GENSKINBITMAP ); } void AddBookmark( char *bookmark ) { COPYDATASTRUCT cds; cds.dwData = IPC_ADDBOOKMARK; cds.lpData = bookmark; cds.cbData = (int)strlen( bookmark ) + 1; SendMessage( winamp, WM_COPYDATA, NULL, (LPARAM)&cds ); } void AddBookmarkW( wchar_t *bookmark ) { COPYDATASTRUCT cds; cds.dwData = IPC_ADDBOOKMARKW; cds.lpData = bookmark; cds.cbData = (int)( sizeof( wchar_t ) * wcslen( bookmark ) + sizeof( wchar_t ) ); SendMessage( winamp, WM_COPYDATA, NULL, (LPARAM)&cds ); } void ShowMediaLibrary() { SendMessage( library, WM_ML_IPC, 0, ML_IPC_ENSURE_VISIBLE ); } const char *GetExtensionList() { return (const char *)SendMessage( winamp, WM_WA_IPC, 0, IPC_GET_EXTLIST ); } bool IsShowing() { return !!SendMessage( library, WM_ML_IPC, 0, ML_IPC_IS_VISIBLE ); } void RefreshPrefs( int prefs ) { SendMessage( library, WM_ML_IPC, prefs, ML_IPC_REFRESH_PREFS ); } void GracenoteCancelRequest() { SendMessage( library, WM_ML_IPC, GRACENOTE_CANCEL_REQUEST, ML_IPC_GRACENOTE ); }// TODO: should we post this? DWORD AddDispatch( wchar_t *name, IDispatch *object ); }; extern MediaLibraryInterface mediaLibrary; #endif