diff options
Diffstat (limited to 'Src/omBrowser/service.h')
-rw-r--r-- | Src/omBrowser/service.h | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/Src/omBrowser/service.h b/Src/omBrowser/service.h new file mode 100644 index 00000000..814bb0b8 --- /dev/null +++ b/Src/omBrowser/service.h @@ -0,0 +1,152 @@ +#ifndef NULLSOFT_WINAMP_OMSERVICE_IMPLEMENTATION_HEADER +#define NULLSOFT_WINAMP_OMSERVICE_IMPLEMENTATION_HEADER + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +#include "./ifc_omservice.h" +#include "./ifc_omservicedetails.h" +#include "./ifc_omserviceeditor.h" +#include "./ifc_omservicecopier.h" +#include "./ifc_omservicecommand.h" +#include "./ifc_omservicehostext.h" +#include "./ifc_omserviceeventmngr.h" +#include "./flagTracker.h" +#include <vector> +#include <bfc/multipatch.h> + +#define MPIID_OMSVC 10 +#define MPIID_OMSVCDETAILS 20 +#define MPIID_OMSVCEDITOR 30 +#define MPIID_OMSVCCOPIER 40 +#define MPIID_OMSVCCOMMAND 50 +#define MPIID_OMSVCEVENTMNGR 60 +#define MPIID_OMSVCHOSTEXT 70 + +class OmService : public MultiPatch<MPIID_OMSVC, ifc_omservice>, + public MultiPatch<MPIID_OMSVCDETAILS, ifc_omservicedetails>, + public MultiPatch<MPIID_OMSVCEDITOR, ifc_omserviceeditor>, + public MultiPatch<MPIID_OMSVCCOPIER, ifc_omservicecopier>, + public MultiPatch<MPIID_OMSVCCOMMAND, ifc_omservicecommand>, + public MultiPatch<MPIID_OMSVCEVENTMNGR, ifc_omserviceeventmngr>, + public MultiPatch<MPIID_OMSVCHOSTEXT, ifc_omservicehostext> +{ +protected: + OmService(UINT serviceId, ifc_omservicehost *serviceHost); + ~OmService(); + +public: + static HRESULT CreateInstance(UINT serviceId, ifc_omservicehost *serviceHost, OmService **serviceOut); + +public: + /* Dispatchable */ + size_t AddRef(); + size_t Release(); + int QueryInterface(GUID interface_guid, void **object); + + /* ifc_omservice */ + unsigned int GetId(); + HRESULT GetName(LPWSTR pszBuffer, UINT cchBufferMax); + HRESULT GetUrl(LPWSTR pszBuffer, UINT cchBufferMax); + HRESULT GetUrlDirect(LPWSTR pszBuffer, UINT cchBufferMax); + HRESULT GetIcon(LPWSTR pszBuffer, UINT cchBufferMax); + HRESULT GetExternal(IDispatch **ppDispatch); + HRESULT GetRating(UINT *rating); + HRESULT GetVersion(UINT *version); + HRESULT GetFlags(UINT *flags); + HRESULT SetAddress(LPCWSTR pszAddress); + HRESULT GetAddress(LPWSTR pszBuffer, UINT cchBufferMax); + HRESULT GetGeneration(UINT *generation); + HRESULT UpdateFlags(UINT flags); + + /* ifc_omservicedetails */ + HRESULT GetDescription(LPWSTR pszBuffer, UINT cchBufferMax); + HRESULT GetAuthorFirst(LPWSTR pszBuffer, UINT cchBufferMax); + HRESULT GetAuthorLast(LPWSTR pszBuffer, UINT cchBufferMax); + HRESULT GetUpdated(LPWSTR pszBuffer, UINT cchBufferMax); + HRESULT GetPublished(LPWSTR pszBuffer, UINT cchBufferMax); + HRESULT GetThumbnail(LPWSTR pszBuffer, UINT cchBufferMax); + HRESULT GetScreenshot(LPWSTR pszBuffer, UINT cchBufferMax); + + /* ifc_omserviceeditor */ + HRESULT SetName(LPCWSTR pszName, BOOL utf8); + HRESULT SetUrl(LPCWSTR pszUrl, BOOL utf8); + HRESULT SetIcon(LPCWSTR pszPath, BOOL utf8); + HRESULT SetRating(UINT nRating); + HRESULT SetVersion(UINT nVersion); + HRESULT SetGeneration(UINT nGeneration); + HRESULT SetFlags(UINT nFlags, UINT nMask); + HRESULT SetDescription(LPCWSTR pszDescription, BOOL utf8); + HRESULT SetAuthorFirst(LPCWSTR pszName, BOOL utf8); + HRESULT SetAuthorLast(LPCWSTR pszName, BOOL utf8); + HRESULT SetUpdated(LPCWSTR pszDate, BOOL utf8); + HRESULT SetPublished(LPCWSTR pszDate, BOOL utf8); + HRESULT SetThumbnail(LPCWSTR pszPath, BOOL utf8); + HRESULT SetScreenshot(LPCWSTR pszPath, BOOL utf8); + HRESULT SetModified(UINT nFlags, UINT nMask); + HRESULT GetModified(UINT *pFlags); + HRESULT BeginUpdate(); + HRESULT EndUpdate(); + + /* ifc_omservicecopier */ + HRESULT CopyTo(ifc_omservice *service, UINT *modifiedFlags); + + /* ifc_omservicecommand */ + HRESULT QueryState(HWND hBrowser, const GUID *commandGroup, UINT commandId); + HRESULT Exec(HWND hBrowser, const GUID *commandGroup, UINT commandId, ULONG_PTR commandArg); + + /* ifc_omserviceeventmngr */ + HRESULT RegisterEventHandler(ifc_omserviceevent *handler); + HRESULT UnregisterEventHandler(ifc_omserviceevent *handler); + HRESULT Signal_ServiceChange(UINT modifiedFlags); + HRESULT Signal_CommandStateChange(const GUID *commandGroup, UINT commandId); + + /* ifc_omservicehostext */ + HRESULT GetHost(ifc_omservicehost **ppHost); + HRESULT SetHost(ifc_omservicehost *serviceHost); + +public: + HRESULT SetId(UINT serviceId); + +private: + static void CALLBACK ModifiedEvent(UINT nMark, FlagTracker *instance, ULONG_PTR user); + void UnregisterAllEventHandlers(); + HRESULT StringCchCopyExMT(LPTSTR pszDest, size_t cchDest, LPCTSTR pszSrc, LPTSTR *ppszDestEnd, size_t *pcchRemaining, DWORD dwFlags); + +protected: + typedef std::vector<ifc_omserviceevent*> EventList; + +protected: + ULONG ref; + UINT id; + LPWSTR name; + LPWSTR url; + LPWSTR icon; + UINT rating; + UINT version; + UINT flags; + UINT generation; + + LPWSTR description; + LPWSTR authorFirst; + LPWSTR authorLast; + LPWSTR published; + LPWSTR updated; + LPWSTR thumbnail; + LPWSTR screenshot; + FlagTracker modified; + + LPWSTR address; + ifc_omservicehost *host; + + CRITICAL_SECTION lock; + + EventList eventList; + CRITICAL_SECTION eventLock; + +protected: + RECVS_MULTIPATCH; +}; + +#endif //NULLSOFT_WINAMP_OMSERVICE_IMPLEMENTATION_HEADER
\ No newline at end of file |