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
132
133
134
135
136
137
138
139
140
141
142
143
|
// TooltipNotify.h: interface for the CTooltipNotify class.
//
//////////////////////////////////////////////////////////////////////
#pragma once
class CTooltip;
class CTooltipNotify
{
private:
struct STooltipData;
public:
CTooltipNotify(HINSTANCE hinstDLL);
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; }
HINSTANCE GetDllInstance() const { return m_hDllInstance; }
private:
// prohibit copying
CTooltipNotify(const CTooltipNotify& rhs);
CTooltipNotify& operator= (const CTooltipNotify& rhs);
private:
static CTooltipNotify *s_pInstance;
static const char *s_szModuleNameOld;
static const char *s_szModuleName;
const HINSTANCE m_hDllInstance;
const BOOL m_bNt50;
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 wXPos;
WORD wYPos;
WORD wStartupDelay;
BYTE bIgnoreNew;
BYTE bIgnoreUnknown;
} m_sOptions;
struct STooltipData {
CTooltip *pTooltip;
UINT_PTR idTimer;
UINT uiTimeout;
HANDLE 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);
TCHAR *StatusToString(int iStatus, TCHAR *szStatus, int iBufSize);
TCHAR *MakeTooltipString(HANDLE hContact, int iStatus, TCHAR *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 BOOL CALLBACK ProtosDlgProcWrapper(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
return CTooltipNotify::GetObjInstance()->ProtosDlgProc(hDlg, msg, wParam, lParam);
}
static BOOL CALLBACK ContactsDlgProcWrapper(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
return CTooltipNotify::GetObjInstance()->ContactsDlgProc(hDlg, msg, wParam, lParam);
}
};
|