summaryrefslogtreecommitdiff
path: root/plugins/HistoryStats/src/column_words.h
blob: 0ec4c4fbc47af54a4826aaf895be165d08998c33 (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
#if !defined(HISTORYSTATS_GUARD_COLUMN_WORDS_H)
#define HISTORYSTATS_GUARD_COLUMN_WORDS_H

#include "colbase_words.h"

/*
 * ColWords
 */

class ColWords
	: public ColBaseWords
{
public:
	typedef std::pair<InOut, ext::string> Word;
	typedef std::vector<Word> WordList;

private:
	class MostCommonWords
	{
	public:
		int operator ()(const WordMap::value_type& a, const WordMap::value_type& b)
		{
			return (a.second != b.second) ? (a.second > b.second) : (a.first < b.first);
		}
	};

	class LeastCommonWords
	{
	public:
		int operator ()(const WordMap::value_type& a, const WordMap::value_type& b)
		{
			return (a.second != b.second) ? (a.second < b.second) : (a.first < b.first);
		}
	};

	class LongestWords
	{
	public:
		int operator ()(const WordMap::value_type& a, const WordMap::value_type& b)
		{
			return (a.first.length() != b.first.length()) ? (a.first.length() > b.first.length()) : (a.first < b.first);
		}
	};

protected:
	int m_nVisMode;
	int m_nNum;
	int m_nOffset;
	bool m_bDetail;
	bool m_bDetailInOut;
	bool m_bInOutColor;

	OptionsCtrl::Radio m_hVisMode;
	OptionsCtrl::Edit  m_hNum;
	OptionsCtrl::Edit  m_hOffset;
	OptionsCtrl::Check m_hDetail;
	OptionsCtrl::Check m_hDetailInOut;
	OptionsCtrl::Check m_hInOutColor;

private:
	void generateWords(WordMap* pWords, WordList* pWordList) const;

public:
	explicit ColWords();

protected:
	virtual const TCHAR* impl_getUID() const { return con::ColWords; }
	virtual const TCHAR* impl_getTitle() const { return LPGENT("Words"); }
	virtual const TCHAR* impl_getDescription() const { return LPGENT("Column holding a list of a specified number of most/least common words or longest words used by you, by your contact, or by both of you."); }
	virtual void impl_copyConfig(const Column* pSource);
	virtual void impl_configRead(const SettingsTree& settings);
	virtual void impl_configWrite(SettingsTree& settings) const;
	virtual void impl_configToUI(OptionsCtrl& Opt, OptionsCtrl::Item hGroup);
	virtual void impl_configFromUI(OptionsCtrl& Opt);
	virtual void impl_contactDataFree(Contact& contact) const;
	virtual void impl_contactDataTransform(Contact& contact) const;
	virtual void impl_contactDataTransformCleanup(Contact& contact) const;
	virtual StyleList impl_outputGetAdditionalStyles(IDProvider& idp);
	virtual void impl_outputRenderHeader(ext::ostream& tos, int row, int rowSpan) const;
	virtual void impl_outputRenderRow(ext::ostream& tos, const Contact& contact, DisplayType display);
};

#endif // HISTORYSTATS_GUARD_COLUMN_WORDS_H