summaryrefslogtreecommitdiff
path: root/plugins/HistoryStats/src/bandctrlimpl.h
blob: d93ed15398f0fb29cdbf5daed7decadded14a952 (plain)
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#if !defined(HISTORYSTATS_GUARD_BANDCTRLIMPL_H)
#define HISTORYSTATS_GUARD_BANDCTRLIMPL_H

#include "stdafx.h"
#include "bandctrldefs.h"

#include <vector>

/*
 * BandCtrlImpl
 */

class BandCtrlImpl
	: public BandCtrlDefs
	, private pattern::NotCopyable<BandCtrlImpl>
{
private:
	struct ItemData {
		bool bRight;
		int nIcon;
		int nIconD;
		ext::string text;
		ext::string tooltip;
		bool bChecked;
		bool bVisible;
		bool bDropDown;
		INT_PTR dwData;
		RECT rItem;
		UINT uTTId;
		bool bEnabled;
	};

private:
	static const wchar_t* m_ClassName;
	static const int m_PollId;
	static const int m_PollDelay;

private:
	static LRESULT CALLBACK staticWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

public:
	static bool registerClass();
	static void unregisterClass();

private:
	HWND       m_hWnd;
	UINT_PTR   m_nOwnId;
	HFONT      m_hFont;
	HTHEME     m_hTheme;
	HIMAGELIST m_hImageList;
	HIMAGELIST m_hImageListD;
	SIZE       m_IconSize;
	HWND       m_hTooltip;
	int        m_nCurHot;
	int        m_nCurFocused;
	int        m_nCurPressed;
	bool       m_bCurPressedDD;
	int        m_nLayout;
	int        m_nDDWidth;
	HICON      m_hDDIcon;

	std::vector<ItemData> m_Items;

private:
	explicit BandCtrlImpl(HWND hWnd, UINT_PTR nOwnId);
	~BandCtrlImpl();

private:
	void onWMPaint();
	void drawButton(HDC hDC, int nItem, int textHeight, bool bBandEnabled);
	void reloadTheme();
	HICON convertToGray(HICON hIcon);
	int onBCMAddButton(BCBUTTON* pButton);
	void onBCMCheckButton(int nItem, bool bCheck);
	void onBCMShowButton(int nItem, bool bShow);
	void onBCMGetButtonRect(int nItem, RECT* pRect);
	void onBCMEnableButton(int nItem, bool bEnable);
	void recalcButtonRects();
	int getNextButton(int nItem);
	int getPrevButton(int nItem);
	void fireEvent(UINT code, int nItem);
	void onWMSetFocus();
	void onWMKeyDown(int nVirtKey);
	void onWMKeyUp(int nVirtKey);
	void onWMMouseLeave();
	void onWMMouseMove(POINTS pts);
	void onWMLButtonDown(POINTS pts);
	void onWMLButtonUp(POINTS pts);
};

#endif // HISTORYSTATS_GUARD_BANDCTRLIMPL_H