summaryrefslogtreecommitdiff
path: root/yapp/notify_imp.cpp
blob: acb9d36bc1e1ab9a8716956d4c485eb942f15327 (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
123
124
125
#include "common.h"
#include "resource.h"
#include "notify.h"
#include "message_pump.h"
#include "docs/m_popup2.h"

HANDLE hhkShow=0, hhkUpdate=0, hhkRemove=0;

//struct 

int Popup2Show(WPARAM wParam, LPARAM lParam) {

	HANDLE hNotify = (HANDLE)lParam;

	POPUPDATAW *pd_out = (POPUPDATAW *)malloc(sizeof(POPUPDATAW));
	memset(pd_out, 0, sizeof(POPUPDATAW));

	PostMPMessage(MUM_CREATEPOPUP, (WPARAM)hNotify, (LPARAM)pd_out);
	PostMPMessage(MUM_NMUPDATE, (WPARAM)hNotify, (LPARAM)0);
	return 0;
}

int Popup2Update(WPARAM wParam, LPARAM lParam) {
	HANDLE hNotify = (HANDLE)lParam;
	PostMPMessage(MUM_NMUPDATE, (WPARAM)hNotify, (LPARAM)0);
	return 0;
}

int Popup2Remove(WPARAM wParam, LPARAM lParam) {
	HANDLE hNotify = (HANDLE)lParam;
	PostMPMessage(MUM_NMREMOVE, (WPARAM)hNotify, (LPARAM)0);
	return 0;
}

int svcPopup2DefaultActions(WPARAM wParam, LPARAM lParam)
{
	//PopupWindow *wnd = (PopupWindow *)MNotifyGetDWord((HANDLE)lParam, "Popup2/data", (DWORD)NULL);
	//if (!wnd) return 0;
	switch (wParam)
	{
		case 0:
		{ // send message
			//if (wnd->lchContact) CallServiceSync(MS_MSG_SENDMESSAGE, (WPARAM)wnd->lchContact, 0);
			//SendMessage(wnd->lchMain, UM_DESTROYPOPUP, 0, 0);
			break;
		}
		case 1:
		{ // dismiss popup
			//SendMessage(wnd->lchMain, UM_DESTROYPOPUP, 0, 0);
			break;
		}
	}
	return 0;
}

BOOL CALLBACK DlgProcPopUps(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
/* To change options use MNotifySet*(hNotify, ....) Apply/Cancel is implemented in notify.dll */
	HANDLE hNotify = (HANDLE)GetWindowLong(hwnd, GWL_USERDATA);
	switch (msg)
	{
		case WM_USER+100:
		{
			// This will be extendet to handle array of handles for multiselect lParam
			// will be HANDLE * and wParam wil; store amount of handles passed
			hNotify = (HANDLE)lParam;
			SetWindowLong(hwnd, GWL_USERDATA, lParam);
			return TRUE;
		}

		case WM_COMMAND:
			// This in different from Miranda options!
			SendMessage(GetParent(GetParent(hwnd)), PSM_CHANGED, 0, 0);
			break;
	}
	return FALSE;
}

int NotifyOptionsInitialize(WPARAM wParam,LPARAM lParam)
{
	OPTIONSDIALOGPAGE odp = {0};
	odp.cbSize = sizeof(odp);
	odp.hInstance = hInst;
	odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_NOTIFY);
	odp.pszTitle = Translate("YAPP Popups");
	odp.flags=ODPF_BOLDGROUPS;
	odp.pfnDlgProc = DlgProcPopUps;
	CallService(MS_NOTIFY_OPT_ADDPAGE, wParam, (LPARAM)&odp);
	return 0;
}

HANDLE hEventNotifyOptInit, hEventNotifyModulesLoaded;

int NotifyModulesLoaded(WPARAM wParam,LPARAM lParam)
{
	hEventNotifyOptInit = HookEvent(ME_NOTIFY_OPT_INITIALISE, NotifyOptionsInitialize);
	return 0;
}

HANDLE hServicesNotify[4];
void InitNotify() {
	hhkShow = HookEvent(ME_NOTIFY_SHOW, Popup2Show);
	hhkUpdate = HookEvent(ME_NOTIFY_UPDATE, Popup2Update);
	hhkRemove = HookEvent(ME_NOTIFY_REMOVE, Popup2Remove);

	hServicesNotify[0] = CreateServiceFunction("Popup2/DefaultActions", svcPopup2DefaultActions);

	hServicesNotify[1] = CreateServiceFunction(MS_POPUP2_SHOW, Popup2Show);
	hServicesNotify[2] = CreateServiceFunction(MS_POPUP2_UPDATE, Popup2Update);
	hServicesNotify[3] = CreateServiceFunction(MS_POPUP2_REMOVE, Popup2Remove);

	hEventNotifyModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, NotifyModulesLoaded);
}

void DeinitNotify() {
	UnhookEvent(hhkShow);
	UnhookEvent(hhkUpdate);
	UnhookEvent(hhkRemove);

	UnhookEvent(hEventNotifyOptInit);
	UnhookEvent(hEventNotifyModulesLoaded);

	for(int i = 0; i < 4; i++)
		DestroyServiceFunction(hServicesNotify[i]);
}