aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Library/ml_wire/service.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/Library/ml_wire/service.h')
-rw-r--r--Src/Plugins/Library/ml_wire/service.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/Src/Plugins/Library/ml_wire/service.h b/Src/Plugins/Library/ml_wire/service.h
new file mode 100644
index 00000000..ad4e839e
--- /dev/null
+++ b/Src/Plugins/Library/ml_wire/service.h
@@ -0,0 +1,69 @@
+#ifndef NULLSOFT_PODCAST_PLUGIN_SERVICE_HEADER
+#define NULLSOFT_PODCAST_PLUGIN_SERVICE_HEADER
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+#include <wtypes.h>
+#include <atomic>
+
+#include "../omBrowser/ifc_omservice.h"
+
+class OmService;
+typedef HWND (CALLBACK *SVCWNDCREATEPROC)(HWND /*hParent*/, OmService* /*service*/);
+
+class OmService : public ifc_omservice
+{
+public:
+ typedef enum
+ {
+ flagRoot = 0x00000001,
+ flagLocal = 0x00000002,
+ } Flags;
+
+protected:
+ OmService( UINT nId );
+ ~OmService();
+
+public:
+ static HRESULT CreateRemote( UINT nId, LPCWSTR pszName, LPCWSTR pszIcon, LPCWSTR pszUrl, OmService **instance );
+ static HRESULT CreateLocal( UINT nId, LPCWSTR pszName, LPCWSTR pszIcon, SVCWNDCREATEPROC windowCreator, OmService **instance );
+
+ /* Dispatchable */
+ size_t AddRef();
+ size_t Release();
+ int QueryInterface( GUID interface_guid, void **object );
+
+ /* ifc_omservice */
+ unsigned int GetId();
+ HRESULT GetName( wchar_t *pszBuffer, int cchBufferMax );
+ HRESULT GetUrl( wchar_t *pszBuffer, int cchBufferMax );
+ HRESULT GetExternal( IDispatch **ppDispatch );
+ HRESULT GetIcon( wchar_t *pszBuffer, int cchBufferMax );
+
+ HRESULT SetName( LPCWSTR pszName );
+ HRESULT SetUrl( LPCWSTR pszUrl );
+ HRESULT SetIcon( LPCWSTR pszIcon );
+
+ void SetFlags( UINT mask, UINT newFlags );
+ UINT GetFlags( void );
+
+ HRESULT SetWindowCreator( SVCWNDCREATEPROC proc );
+ HRESULT GetWindowCreator( SVCWNDCREATEPROC *proc );
+
+ HRESULT CreateView( HWND hParent, HWND *hView );
+
+protected:
+ RECVS_DISPATCH;
+
+ std::atomic<std::size_t> _ref = 1;
+ UINT id = 0;
+ LPWSTR name = NULL;
+ LPWSTR url = NULL;
+ SVCWNDCREATEPROC windowCreator = NULL;
+ LPWSTR icon = NULL;
+ UINT flags = 0;
+};
+
+#endif //NULLSOFT_PODCAST_PLUGIN_SERVICE_HEADER