aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/General/gen_ml/skinnedmenuthreadinfo.h
blob: 347f37b1959737fffae1c045f226dca0584beae9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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 <wtypes.h>
#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