aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Library/ml_fanzone/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/Library/ml_fanzone/main.cpp')
-rw-r--r--Src/Plugins/Library/ml_fanzone/main.cpp110
1 files changed, 110 insertions, 0 deletions
diff --git a/Src/Plugins/Library/ml_fanzone/main.cpp b/Src/Plugins/Library/ml_fanzone/main.cpp
new file mode 100644
index 00000000..f94e0e08
--- /dev/null
+++ b/Src/Plugins/Library/ml_fanzone/main.cpp
@@ -0,0 +1,110 @@
+#define PLUGIN_VERSION L"0.1"
+
+#include "main.h"
+
+#include "../nu/AutoWide.h"
+
+#include "../../General/gen_ml/menu.h"
+#include "../../General/gen_ml/ml_ipc_0313.h"
+
+#include "../WAT/WAT.h"
+
+static int Init();
+static void Quit();
+
+extern "C" winampMediaLibraryPlugin plugin =
+{
+ MLHDR_VER,
+ "nullsoft(ml_fanzone.dll)",
+ Init,
+ Quit,
+ fanzone_pluginMessageProc,
+ 0,
+ 0,
+ 0,
+};
+
+int fanzone_treeItem = 0;
+
+HCURSOR hDragNDropCursor;
+C_Config *g_config = 0;
+WNDPROC waProc = 0;
+
+// wasabi based services for localisation support
+api_language *WASABI_API_LNG = 0;
+HINSTANCE WASABI_API_LNG_HINST = 0;
+HINSTANCE WASABI_API_ORIG_HINST = 0;
+api_stats *AGAVE_API_STATS = 0;
+api_application *WASABI_API_APP = 0;
+
+static DWORD WINAPI wa_newWndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
+{
+ if ( waProc )
+ return (DWORD)CallWindowProcW( waProc, hwnd, msg, wParam, lParam );
+ else
+ return (DWORD)DefWindowProc( hwnd, msg, wParam, lParam );
+}
+
+int Init()
+{
+ waProc = (WNDPROC)SetWindowLongPtrW( plugin.hwndWinampParent, GWLP_WNDPROC, (LONG_PTR)wa_newWndProc );
+
+ mediaLibrary.library = plugin.hwndLibraryParent;
+ mediaLibrary.winamp = plugin.hwndWinampParent;
+ mediaLibrary.instance = plugin.hDllInstance;
+
+ waServiceFactory *sf = plugin.service->service_getServiceByGuid( languageApiGUID );
+ if ( sf )
+ WASABI_API_LNG = reinterpret_cast<api_language *>( sf->getInterface() );
+
+ sf = plugin.service->service_getServiceByGuid( AnonymousStatsGUID );
+ if ( sf )
+ AGAVE_API_STATS = reinterpret_cast<api_stats *>( sf->getInterface() );
+
+ sf = plugin.service->service_getServiceByGuid( applicationApiServiceGuid );
+ if ( sf )
+ WASABI_API_APP = reinterpret_cast<api_application *>( sf->getInterface() );
+
+ // need to have this initialised before we try to do anything with localisation features
+ WASABI_API_START_LANG( plugin.hDllInstance, MlFanZoneLangGUID );
+
+ static wchar_t szDescription[ 256 ];
+ StringCchPrintfW( szDescription, ARRAYSIZE( szDescription ), WASABI_API_LNGSTRINGW( IDS_NULLSOFT_FANZONE ), PLUGIN_VERSION );
+ plugin.description = (char *)szDescription;
+
+ wchar_t inifile[ MAX_PATH ] = { 0 };
+ mediaLibrary.BuildPath( L"Plugins", inifile, MAX_PATH );
+ CreateDirectoryW( inifile, NULL );
+
+ mediaLibrary.BuildPath( L"Plugins\\gen_ml.ini", inifile, MAX_PATH );
+ g_config = new C_Config( inifile );
+
+ hDragNDropCursor = LoadCursor( GetModuleHandle( L"gen_ml.dll" ), MAKEINTRESOURCE( ML_IDC_DRAGDROP ) );
+
+ NAVINSERTSTRUCT nis = { 0 };
+ nis.item.cbSize = sizeof( NAVITEM );
+ nis.item.pszText = WASABI_API_LNGSTRINGW( IDS_FANZONE );
+ nis.item.pszInvariant = L"Fanzone Library";
+ nis.item.mask = NIMF_TEXT | NIMF_TEXTINVARIANT | NIMF_IMAGE | NIMF_IMAGESEL;
+ nis.item.iSelectedImage = nis.item.iImage = mediaLibrary.AddTreeImageBmp( IDB_TREEITEM_FANZONE );
+
+ // map to item id (will probably have to change but is a quick port to support invariant item naming)
+ NAVITEM nvItem = { sizeof( NAVITEM ),0,NIMF_ITEMID, };
+ nvItem.hItem = MLNavCtrl_InsertItem( plugin.hwndLibraryParent, &nis );
+ MLNavItem_GetInfo( plugin.hwndLibraryParent, &nvItem );
+ fanzone_treeItem = nvItem.id;
+
+
+ return 0;
+}
+
+void Quit()
+{
+ if ( g_config != 0 )
+ delete g_config;
+}
+
+extern "C" __declspec(dllexport) winampMediaLibraryPlugin *winampGetMediaLibraryPlugin()
+{
+ return &plugin;
+}