summaryrefslogtreecommitdiff
path: root/plugins/HistoryStats/src/dlgfilterwords.h
blob: 6f6202d3490406a4ca9448328928a559ba0224eb (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
#if !defined(HISTORYSTATS_GUARD_DLGFILTERWORDS_H)
#define HISTORYSTATS_GUARD_DLGFILTERWORDS_H

#include "stdafx.h"

#include "bandctrl.h"
#include "optionsctrl.h"
#include "settings.h"

class DlgFilterWords
	: private pattern::NotCopyable<DlgFilterWords>
{
private:
	enum SetAction {
		saAdd         = 0,
		saDel         = 1,
	};

	typedef Settings::WordSet WordSet;
	typedef Settings::Filter Filter;
	typedef Settings::FilterSet FilterSet;
	typedef Settings::ColFilterSet ColFilterSet;
	typedef std::vector<Filter*> FilterVec;

	class FilterCompare
	{
	public:
		bool operator ()(const Filter* first, const Filter* second) { return ext::strfunc::icoll(first->getName().c_str(), second->getName().c_str()) < 0; }
	};

private:
	static INT_PTR CALLBACK staticDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);

private:
	HWND m_hWnd;
	BandCtrl m_Band;
	HANDLE m_hActionButtons[2];
	OptionsCtrl m_Sets;
	FilterVec m_Filters;
	bool m_bColProvided;
	ColFilterSet m_ColFilters;

private:
	void onWMInitDialog();
	void onWMDestroy();
	void onBandClicked(HANDLE hButton, INT_PTR dwData);
	void onSetAdd();
	void onSetDel();
	void onSetItemModified(HANDLE hItem, INT_PTR dwData);
	void onSetSelChanging(HANDLE hItem, INT_PTR dwData);
	void onSetSelChanged(HANDLE hItem, INT_PTR dwData);

	void clearFilters();

public:
    explicit DlgFilterWords();
	~DlgFilterWords();

	bool showModal(HWND hParent);
	void setFilters(const FilterSet& Filters);
	void setColFilters(const ColFilterSet& ColFilters);
	void updateFilters(FilterSet& Filters);
	const ColFilterSet& getColFilters() { return m_ColFilters; }
};

#endif // HISTORYSTATS_GUARD_DLGFILTERWORDS_H