summaryrefslogtreecommitdiff
path: root/plugins/Alarms/trigger.cpp
blob: b52ff8f6547602c20e6eeb4c4478d84be19edeab (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
#include "common.h"
#include "trigger.h"

AlarmList alist;
//SPECIFICTRIGGERINFO sti;
TRIGGERDATA td;

unsigned short last_selected_id = 0;

static INT_PTR CALLBACK DlgProcTriggerOptions(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch(msg) {
	case WM_INITDIALOG:
		TranslateDialogDefault(hwndDlg);
		{
			copy_list(alist);
			ALARM *i;
			for(alist.reset(); i = alist.current(); alist.next()) {
				int pos = SendDlgItemMessage(hwndDlg, IDC_LST_TRIGLIST, LB_ADDSTRING, (WPARAM)-1, (LPARAM)i->szTitle);
				SendDlgItemMessage(hwndDlg, IDC_LST_TRIGLIST, LB_SETITEMDATA, (WPARAM)pos, (LPARAM)i->id);
				if (i->trigger_id == (unsigned int)lParam)
					SendDlgItemMessage(hwndDlg, IDC_LST_TRIGLIST, LB_SETCURSEL, (WPARAM)pos, 0);
			}
		}
		return FALSE;

	case WM_COMMAND:
		if (HIWORD( wParam ) == LBN_SELCHANGE) {
			int pos = SendDlgItemMessage(hwndDlg, IDC_LST_TRIGLIST, LB_GETCURSEL, 0, 0);
			if (pos != LB_ERR) {
				last_selected_id = (unsigned short)SendDlgItemMessage(hwndDlg, IDC_LST_TRIGLIST, LB_GETITEMDATA, pos, 0);
			}
			return TRUE;
		}
		break;
	case TM_GETTRIGGERINFO:
		{
			//memset(&sti, sizeof(sti), 0);
			memset(&td, sizeof(td), 0);

			ALARM *i;
			for(alist.reset(); i = alist.current(); alist.next()) {
				if (i->trigger_id == wParam) {
					//sti.cbSize = sizeof(sti);
					//sti.triggerID = wParam;
					//sti.pszSummary = i->szTitle;
					//sti.td = &td;

					td.cbSize = sizeof(td);
					td.dFlags = DF_TEXT;
					td.szText = i->szDesc;
					//*(SPECIFICTRIGGERINFO **)lParam = &sti;
					break;
				}
			}
		}
		return TRUE;
	case TM_ADDTRIGGER:
		{
			ALARM *i;
			for(alist.reset(); i = alist.current(); alist.next()) {
				if (i->id == last_selected_id) {
					i->trigger_id = wParam;
					alter_alarm_list(i);
					break;
				}
			}
		}
		return TRUE;
	case TM_DELTRIGGER:
		{
			ALARM *i;
			for(alist.reset(); i = alist.current(); alist.next()) {
				if (i->trigger_id == wParam) {
					i->trigger_id = 0;
					alter_alarm_list(i);
					break;
				}
			}
		}
		return TRUE;

	case WM_DESTROY:
		// it seems this is called before the TM_ADDTRIGGER messsage is passed to us....tsk,tsk :P
		//alist.clear();
		break;

	}
	return FALSE;
}

int LoadTriggerSupport() {
	if (ServiceExists(MS_TRIGGER_REGISTERTRIGGER)) {
		TRIGGERREGISTER treg = {0};
	
		treg.cbSize = sizeof(treg);
		treg.pszName = Translate("Alarms");
		treg.hInstance = hInst;
		treg.pfnDlgProc = DlgProcTriggerOptions;
		treg.pszTemplate = MAKEINTRESOURCE(IDD_OPTTRIGGER);

		CallService(MS_TRIGGER_REGISTERTRIGGER, 0, (LPARAM)&treg);
	}

	return 0;
}