aboutsummaryrefslogtreecommitdiff
path: root/Src/Winamp/winampApi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Winamp/winampApi.cpp')
-rw-r--r--Src/Winamp/winampApi.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/Src/Winamp/winampApi.cpp b/Src/Winamp/winampApi.cpp
new file mode 100644
index 00000000..a6b7be28
--- /dev/null
+++ b/Src/Winamp/winampApi.cpp
@@ -0,0 +1,83 @@
+#include "main.h"
+#include "./winampApi.h"
+
+
+WinampApi::WinampApi()
+{}
+WinampApi::~WinampApi()
+{}
+
+HRESULT WinampApi::CreateInstance(WinampApi **instance)
+{
+ if (NULL == instance) return E_POINTER;
+ *instance = new WinampApi();
+ if (NULL == *instance) return E_OUTOFMEMORY;
+ return S_OK;
+}
+
+const char *WinampApi::getServiceName()
+{
+ return "Winamp API";
+}
+
+const GUID WinampApi::getServiceGuid()
+{
+ return winampApiGuid;
+}
+
+size_t WinampApi::AddRef()
+{
+ return _ref.fetch_add( 1 );
+}
+
+size_t WinampApi::Release()
+{
+ if ( _ref.load() == 0 )
+ return _ref.load();
+
+ LONG r = _ref.fetch_sub( 1 );
+ if (0 == r)
+ delete(this);
+
+ return r;
+}
+
+int WinampApi::QueryInterface(GUID interface_guid, void **object)
+{
+ if (NULL == object) return E_POINTER;
+ *object = NULL;
+ return E_NOINTERFACE;
+}
+
+HWND WinampApi::GetMainWindow(void)
+{
+ return hMainWindow;
+}
+
+HWND WinampApi::GetDlgParent(void)
+{
+ return (g_dialog_box_parent) ? g_dialog_box_parent : hMainWindow;
+}
+
+HRESULT WinampApi::OpenUrl(HWND hwnd, const wchar_t *url)
+{
+ myOpenURL(hwnd, (wchar_t*)url);
+ return S_OK;
+}
+
+int WinampApi::GetRegVer()
+{
+ return 2;
+}
+
+#define CBCLASS WinampApi
+START_DISPATCH;
+CB(ADDREF, AddRef)
+CB(RELEASE, Release)
+CB(QUERYINTERFACE, QueryInterface)
+CB(API_GETMAINWINDOW, GetMainWindow)
+CB(API_GETDLGPARENT, GetDlgParent)
+CB(API_OPENURL, OpenUrl)
+CB(API_GETREGVER, GetRegVer)
+END_DISPATCH;
+#undef CBCLASS