summaryrefslogtreecommitdiff
path: root/plugins/SecureIM/src/loadicons.cpp
blob: 1119a63f8e5c551baae38d191ccd8350bda6d1d7 (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
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
#include "commonheaders.h"

struct
{
	int  key; // Resource ID
	BYTE tbl; // Table NUM
	BYTE idx; // Table IDX
	char *section;
	char *name;
	char *text;
}
static icons[] =
{
	// Contact List
	{IDI_CL_DIS,	TBL_IEC, IEC_CL_DIS,	MODULENAME"/Contact List", "sim_cl_dis", "Connection Disabled"},
	{IDI_CL_EST,	TBL_IEC, IEC_CL_EST,	MODULENAME"/Contact List", "sim_cl_est", "Connection Established"},

	// Contact Menu
	{IDI_CM_DIS,	TBL_ICO, ICO_CM_DIS,	MODULENAME"/Contact Menu", "sim_cm_dis", "Disable Secure Connection"},
	{IDI_CM_EST,	TBL_ICO, ICO_CM_EST,	MODULENAME"/Contact Menu", "sim_cm_est", "Establishe Secure Connection"},

	// Message Window
	{IDI_MW_DIS,	TBL_ICO, ICO_MW_DIS,	MODULENAME"/Message Window", "sim_mw_dis", "Connection Disabled"},
	{IDI_MW_EST,	TBL_ICO, ICO_MW_EST,	MODULENAME"/Message Window", "sim_mw_est", "Connection Established"},

	// popup's
	{IDI_PU_DIS,	TBL_POP, POP_PU_DIS,	MODULENAME"/Popups", "sim_pu_dis", "Secure Connection Disabled"},
	{IDI_PU_EST,	TBL_POP, POP_PU_EST,	MODULENAME"/Popups", "sim_pu_est", "Secure Connection Established"},
	{IDI_PU_PRC,	TBL_POP, POP_PU_PRC,	MODULENAME"/Popups", "sim_pu_prc", "Secure Connection In Process"},
	{IDI_PU_MSG,	TBL_POP, POP_PU_MSR,	MODULENAME"/Popups", "sim_pu_msr", "Recv Secured Message"},
	{IDI_PU_MSG,	TBL_POP, POP_PU_MSS,	MODULENAME"/Popups", "sim_pu_mss", "Sent Secured Message"},

	// statuses
	{IDI_ST_DIS,	TBL_ICO, ICO_ST_DIS,	MODULENAME"/Menu State", "sim_st_dis", "Disabled"},
	{IDI_ST_ENA,	TBL_ICO, ICO_ST_ENA,	MODULENAME"/Menu State", "sim_st_ena", "Enabled"},
	{IDI_ST_TRY,	TBL_ICO, ICO_ST_TRY,	MODULENAME"/Menu State", "sim_st_try", "Always Try"},

	// overlay
	{IDI_OV_NAT,	TBL_ICO, ICO_OV_NAT,	MODULENAME"/Overlays", "sim_ov_nat", "Native mode"},
	{IDI_OV_PGP,	TBL_ICO, ICO_OV_PGP,	MODULENAME"/Overlays", "sim_ov_pgp", "PGP mode"},
	{IDI_OV_GPG,	TBL_ICO, ICO_OV_GPG,	MODULENAME"/Overlays", "sim_ov_gpg", "GPG mode"},
	{IDI_OV_RSA,	TBL_ICO, ICO_OV_RSA,	MODULENAME"/Overlays", "sim_ov_rsa", "RSA/AES mode"},
};

HINSTANCE LoadIconsPack(const char* szIconsPack)
{
	HINSTANCE hNewIconInst = LoadLibrary(szIconsPack);
	if (hNewIconInst != NULL) {
		for(int i = ID_FIRSTICON; i <= ID_LASTICON; i++)
			if (LoadIcon(hNewIconInst, MAKEINTRESOURCE(i)) == NULL) {
				FreeLibrary(hNewIconInst);
				hNewIconInst = NULL;
				break;
			}
	}
	return hNewIconInst;
}

int ReloadIcons(WPARAM wParam, LPARAM lParam)
{
	for (int i=0; i < SIZEOF(icons); i++) {
		HICON hIcon = Skin_GetIcon(icons[i].name);
		if (icons[i].tbl == TBL_IEC)
			g_hIEC[icons[i].idx] = hIcon;
		else if (icons[i].tbl == TBL_ICO)
			g_hICO[icons[i].idx] = hIcon;
		else if (icons[i].tbl == TBL_POP)
			g_hPOP[icons[i].idx] = hIcon;
	}

	return 0;
}

void InitIcons(void)
{
	HINSTANCE hNewIconInst = NULL;

	if ( g_hFolders ) {
		TCHAR pathname[MAX_PATH];
		FoldersGetCustomPathExT(g_hFolders, pathname, MAX_PATH, "icons\\");
		if (hNewIconInst == NULL)
			hNewIconInst = LoadIconsPack(pathname);
	}

	if (hNewIconInst == NULL)
		hNewIconInst = LoadIconsPack("icons\\secureim_icons.dll");

	if (hNewIconInst == NULL)
		hNewIconInst = LoadIconsPack("plugins\\secureim_icons.dll");

	if (hNewIconInst == NULL)
		g_hIconInst = g_hInst;
	else
		g_hIconInst = hNewIconInst;

	TCHAR tszPath[MAX_PATH];
	GetModuleFileName(g_hIconInst, tszPath, SIZEOF(tszPath));

	SKINICONDESC sid = { sizeof(sid) };
	sid.pszSection = "SecureIM";
	sid.ptszDefaultFile = tszPath;

	for (int i=0; i < SIZEOF(icons); i++) {
		sid.pszSection = icons[i].section;
		sid.pszName = icons[i].name;
		sid.pszDescription = icons[i].text;
		sid.iDefaultIndex = -icons[i].key;
		HANDLE hIcolib = Skin_AddIcon(&sid);
		
		HICON hIcon = Skin_GetIconByHandle(hIcolib);
		if (icons[i].tbl == TBL_IEC)
			g_hIEC[icons[i].idx] = hIcon;
		else if (icons[i].tbl == TBL_ICO)
			g_hICO[icons[i].idx] = hIcon;
		else if (icons[i].tbl == TBL_POP)
			g_hPOP[icons[i].idx] = hIcon;
	}

	AddHookFunction(ME_SKIN2_ICONSCHANGED, ReloadIcons);
}

// EOF