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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
// TooltipNotify.h: interface for the CTooltipNotify class.
//
//////////////////////////////////////////////////////////////////////
#pragma once
class CTooltip;
class CTooltipNotify : public MNonCopyable
{
private:
struct STooltipData;
public:
CTooltipNotify();
virtual ~CTooltipNotify();
// exceptions
class EAlreadyExists {};
BOOL EndNotify(STooltipData* pTooltipData);
void EndNotifyAll();
CTooltip *BeginNotify(STooltipData *pTooltipData);
void OnTooltipDblClicked(CTooltip *pTooltip);
BOOL OnTooltipBeginMove(CTooltip *pTooltip);
void OnTooltipEndMove(CTooltip *pTooltip);
int InitializeOptions(WPARAM wParam, LPARAM lParam);
int ContactSettingChanged(WPARAM wParam, LPARAM lParam);
int ProtoAck(WPARAM wParam, LPARAM lParam);
int ModulesLoaded(WPARAM wParam,LPARAM lParam);
int ProtoContactIsTyping(WPARAM wParam, LPARAM lParam);
static CTooltipNotify *GetObjInstance() { return s_pInstance; }
private:
static CTooltipNotify *s_pInstance;
static const char *s_szModuleNameOld;
struct SOptions {
BYTE bFirstRun;
BYTE bOffline;
BYTE bOnline;
BYTE bOther;
BYTE bTyping;
BYTE bIdle;
BYTE bConjSOLN;
BYTE bX2;
BYTE bAutoPos;
BYTE bBallonTip;
BYTE bTransp;
BYTE bTranspInput;
BYTE bAlpha;
BYTE bLDblClick;
BYTE bPrefixProto;
WORD wDuration;
WORD wStartupDelay;
BYTE bIgnoreNew;
BYTE bIgnoreUnknown;
} m_sOptions;
struct STooltipData {
CTooltip *pTooltip;
UINT_PTR idTimer;
UINT uiTimeout;
MCONTACT hContact;
int iStatus;
};
struct ProtoData {
const char* proto;
UINT_PTR timerId;
};
typedef std::vector<STooltipData*> TooltipsList;
typedef TooltipsList::iterator TooltipsListIter;
typedef TooltipsList::reverse_iterator TooltipsListRevIter;
TooltipsList m_TooltipsList;
typedef std::vector<ProtoData> MapTimerIdProto;
typedef MapTimerIdProto::iterator MapTimerIdProtoIter;
MapTimerIdProto m_mapTimerIdProto;
MapTimerIdProtoIter FindProtoByTimer(UINT idTimer);
template<typename T> TooltipsListIter FindBy(T STooltipData::* m, const T& value);
wchar_t *StatusToString(int iStatus, wchar_t *szStatus, int iBufSize);
wchar_t *MakeTooltipString(MCONTACT hContact, int iStatus, wchar_t *szString, int iBufSize);
void MigrateSettings();
void RegisterFonts();
void GetFont(int iStatus, LOGFONT* lf, COLORREF* text, COLORREF* bg);
void ResetCList(HWND hwndDlg);
void LoadList(HWND hwndDlg, HANDLE hItemNew, HANDLE hItemUnknown);
void SaveList(HWND hwndDlg, HANDLE hItemNew, HANDLE hItemUnknown);
void LoadSettings();
void SaveSettings();
void ValidateSettings();
void ReadSettingsFromDlg(HWND hDlg);
void WriteSettingsToDlg(HWND hDlg);
void SuspendTimer(CTooltip *pTooltip);
void ResumeTimer(CTooltip *pTooltip);
void OnConnectionTimer(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
void OnTooltipTimer(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
// Dialog procedures
BOOL OptionsDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL ProtosDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL ContactsDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
static void CALLBACK ConnectionTimerProcWrapper(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
CTooltipNotify::GetObjInstance()->OnConnectionTimer(hwnd, uMsg, idEvent, dwTime);
}
static void CALLBACK TooltipTimerProcWrapper(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
CTooltipNotify::GetObjInstance()->OnTooltipTimer(hwnd, uMsg, idEvent, dwTime);
}
static INT_PTR CALLBACK OptionsDlgProcWrapper(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
return CTooltipNotify::GetObjInstance()->OptionsDlgProc(hDlg, msg, wParam, lParam);
}
static INT_PTR CALLBACK ProtosDlgProcWrapper(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
return CTooltipNotify::GetObjInstance()->ProtosDlgProc(hDlg, msg, wParam, lParam);
}
static INT_PTR CALLBACK ContactsDlgProcWrapper(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
return CTooltipNotify::GetObjInstance()->ContactsDlgProc(hDlg, msg, wParam, lParam);
}
};
|