From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/Plugins/General/gen_ml/skinnedmenuthreadinfo.h | 74 ++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Src/Plugins/General/gen_ml/skinnedmenuthreadinfo.h (limited to 'Src/Plugins/General/gen_ml/skinnedmenuthreadinfo.h') diff --git a/Src/Plugins/General/gen_ml/skinnedmenuthreadinfo.h b/Src/Plugins/General/gen_ml/skinnedmenuthreadinfo.h new file mode 100644 index 00000000..347f37b1 --- /dev/null +++ b/Src/Plugins/General/gen_ml/skinnedmenuthreadinfo.h @@ -0,0 +1,74 @@ +#ifndef NULLOSFT_MEDIALIBRARY_SKINNED_MENU_THREAD_INFO_HEADER +#define NULLOSFT_MEDIALIBRARY_SKINNED_MENU_THREAD_INFO_HEADER + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +#include +#include "./klib/khash.h" + +#ifdef _WIN64 + KHASH_MAP_INIT_INT64(intptr_map, HWND); +#else + KHASH_MAP_INIT_INT(intptr_map, HWND); +#endif + +KHASH_SET_INIT_INT(int_set) + +class SkinnedMenu; +class SkinnedMenuWnd; + +class SkinnedMenuThreadInfo +{ +protected: + SkinnedMenuThreadInfo(); + ~SkinnedMenuThreadInfo(); + +public: + static HRESULT GetInstance(BOOL allowCreate, SkinnedMenuThreadInfo **instance); + +public: + size_t AddRef(); + size_t Release(); + + BOOL SetAttachHook(SkinnedMenu *menu); + BOOL RemoveAttachHook(SkinnedMenu *menu); + BOOL IsAttachHookActive(); + + BOOL SetValidationHook(SkinnedMenuWnd *window); + BOOL RemoveValidationHook(SkinnedMenuWnd *window); + BOOL IsValidationHookActive(); + + BOOL RegisterMenu(HMENU menu, HWND window); + BOOL UnregisterMenu(HMENU menu); + HWND FindMenuWindow(HMENU menu); + + void ClaimId(unsigned int id); + void ReleaseId(unsigned int id); + unsigned int GetAvailableId(); + + HMENU SetActiveMeasureMenu(HMENU menu); + HMENU GetActiveMeasureMenu(); + +protected: + LRESULT AttachHook(int nCode, WPARAM wParam, LPARAM lParam); + LRESULT ValidationHook(int nCode, WPARAM wParam, LPARAM lParam); + +protected: + friend static LRESULT CALLBACK SkinnedMenuThreadInfo_AttachHookCb(int nCode, WPARAM wParam, LPARAM lParam); + friend static LRESULT CALLBACK SkinnedMenuThreadInfo_ValidationHookCb(int nCode, WPARAM wParam, LPARAM lParam); + +protected: + size_t ref; + HHOOK attachHook; + SkinnedMenu *attachMenu; + HHOOK validationHook; + SkinnedMenuWnd *validationWindow; + khash_t(intptr_map) *windowMap; + khash_t(int_set) *claimedIdSet; + unsigned int lastAssignedId; + HMENU activeMeasureMenu; +}; + +#endif //NULLOSFT_MEDIALIBRARY_SKINNED_MENU_THREAD_INFO_HEADER \ No newline at end of file -- cgit