#include "commonheaders.h"

INT_PTR CALLBACK PopOptionsDlgProc(HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
	char getTimeout[5];

	HWND hec = GetDlgItem(hDlg, IDC_EC);
	HWND hdc = GetDlgItem(hDlg, IDC_DC);
	HWND hks = GetDlgItem(hDlg, IDC_KS);
	HWND hkr = GetDlgItem(hDlg, IDC_KR);
	HWND hss = GetDlgItem(hDlg, IDC_SS);
	HWND hsr = GetDlgItem(hDlg, IDC_SR);

	switch (wMsg) {
	case WM_INITDIALOG:
		TranslateDialogDefault(hDlg);
		RefreshPopupOptionsDlg(hec,hdc,hss,hsr,hks,hkr);

		DBVARIANT dbv;
		char *timeout;

		//set timeout value for Key
		if (db_get(0, MODULENAME, "timeoutKey", &dbv) == 0) timeout=dbv.pszVal;
		else timeout="0";
		SetDlgItemText(hDlg, IDC_TIMEKEY, timeout);
		db_free(&dbv);

		//set timeout value for SEC
		if (db_get(0, MODULENAME, "timeoutSec", &dbv) == 0) timeout=dbv.pszVal;
		else timeout="0";
		SetDlgItemText(hDlg, IDC_TIMESEC, timeout);
		db_free(&dbv);

		//set timeout value for SR
		if (db_get(0, MODULENAME, "timeoutSR", &dbv) == 0) timeout=dbv.pszVal;
		else timeout="0";
		SetDlgItemText(hDlg, IDC_TIMESR, timeout);
		db_free(&dbv);

		//key color
		SendDlgItemMessage(hDlg,IDC_BACKKEY,CPM_SETCOLOUR,0,db_get_dw(0, MODULENAME, "colorKeyb", RGB(230,230,255)));
		SendDlgItemMessage(hDlg,IDC_TEXTKEY,CPM_SETCOLOUR,0,db_get_dw(0, MODULENAME, "colorKeyt", RGB(0,0,0)));

		//Session color
		SendDlgItemMessage(hDlg,IDC_BACKSEC,CPM_SETCOLOUR,0,db_get_dw(0, MODULENAME, "colorSecb", RGB(255,255,200)));
		SendDlgItemMessage(hDlg,IDC_TEXTSEC,CPM_SETCOLOUR,0,db_get_dw(0, MODULENAME, "colorSect", RGB(0,0,0)));

		//SR color
		SendDlgItemMessage(hDlg,IDC_BACKSR,CPM_SETCOLOUR,0,db_get_dw(0, MODULENAME, "colorSRb", RGB(200,255,200)));
		SendDlgItemMessage(hDlg,IDC_TEXTSR,CPM_SETCOLOUR,0,db_get_dw(0, MODULENAME, "colorSRt", RGB(0,0,0)));
		break;

	case WM_COMMAND:
		if (HIWORD(wParam) == CPN_COLOURCHANGED) {
			//It's a colour picker change. LOWORD(wParam) is the control id.
			DWORD color = SendDlgItemMessage(hDlg,LOWORD(wParam),CPM_GETCOLOUR,0,0);

			switch(LOWORD(wParam)) {
			case IDC_BACKKEY:
				db_set_dw(0, MODULENAME, "colorKeyb", color);
				break;
			case IDC_TEXTKEY:
				db_set_dw(0, MODULENAME, "colorKeyt", color);
				break;
			case IDC_BACKSEC:
				db_set_dw(0, MODULENAME, "colorSecb", color);
				break;
			case IDC_TEXTSEC:
				db_set_dw(0, MODULENAME, "colorSect", color);
				break;
			case IDC_BACKSR:
				db_set_dw(0, MODULENAME, "colorSRb", color);
				break;
			case IDC_TEXTSR:
				db_set_dw(0, MODULENAME, "colorSRt", color);
				break;
			}
			return TRUE;
		}

		switch (LOWORD(wParam)) {
		case IDC_PREV:
			//preview popups...
			showPopup(LPGEN("Key Popup"),NULL,g_hPOP[POP_PU_PRC],0);
			showPopup(LPGEN("Secure Popup"),NULL,g_hPOP[POP_PU_EST],1);
			showPopup(LPGEN("Message Popup"),NULL,g_hPOP[POP_PU_MSR],2);
			break;
		case IDC_EC:
			//set ec checkbox value
			db_set_b(0, MODULENAME, "ec", (BYTE)(SendMessage(hec,BM_GETCHECK,0L,0L) == BST_CHECKED));
			break;
		case IDC_DC:
			//set dc checkbox value
			db_set_b(0, MODULENAME, "dc", (BYTE)(SendMessage(hdc,BM_GETCHECK,0L,0L) == BST_CHECKED));
			break;
		case IDC_SS:
			//set ss checkbox value
			db_set_b(0, MODULENAME, "ss", (BYTE)(SendMessage(hss,BM_GETCHECK,0L,0L) == BST_CHECKED));
			break;
		case IDC_SR:
			//set sr checkbox value
			db_set_b(0, MODULENAME, "sr", (BYTE)(SendMessage(hsr,BM_GETCHECK,0L,0L) == BST_CHECKED));
			break;
		case IDC_KS:
			//set indicator checkbox value
			db_set_b(0, MODULENAME, "ks", (BYTE)(SendMessage(hks,BM_GETCHECK,0L,0L) == BST_CHECKED));
			break;
		case IDC_KR:
			//set indicator checkbox value
			db_set_b(0, MODULENAME, "kr", (BYTE)(SendMessage(hkr,BM_GETCHECK,0L,0L) == BST_CHECKED));
			break;
		case IDC_TIMEKEY:
			//set timeout value
			GetDlgItemText(hDlg,IDC_TIMEKEY,getTimeout,sizeof(getTimeout));
			mir_itoa(atoi(getTimeout),getTimeout,10);
			db_set_s(0, MODULENAME, "timeoutKey", getTimeout);
			break;
		case IDC_TIMESEC:
			//set timeout value
			GetDlgItemText(hDlg,IDC_TIMESEC,getTimeout,sizeof(getTimeout));
			mir_itoa(atoi(getTimeout),getTimeout,10);
			db_set_s(0, MODULENAME, "timeoutSec", getTimeout);
			break;
		case IDC_TIMESR:
			//set timeout value
			GetDlgItemText(hDlg,IDC_TIMESR,getTimeout,sizeof(getTimeout));
			mir_itoa(atoi(getTimeout),getTimeout,10);
			db_set_s(0, MODULENAME, "timeoutSR", getTimeout);
			break;
		}

		RefreshPopupOptionsDlg(hec,hdc,hss,hsr,hks,hkr);
		break;

	default:
		return FALSE;
	}
	return TRUE;
}

void RefreshPopupOptionsDlg(HWND hec,HWND hdc,HWND hss,HWND hsr,HWND hks,HWND hkr)
{
	// ec checkbox
	SendMessage(hec, BM_SETCHECK, db_get_b(0, MODULENAME, "ec", 1), 0L);

	// dc checkbox
	SendMessage(hdc, BM_SETCHECK, db_get_b(0, MODULENAME, "dc", 1), 0L);

	// ks checkbox
	SendMessage(hks, BM_SETCHECK, db_get_b(0, MODULENAME, "ks", 1), 0L);

	// kr checkbox
	SendMessage(hkr, BM_SETCHECK, db_get_b(0, MODULENAME, "kr", 1), 0L);

	//ss checkbox
	SendMessage(hss, BM_SETCHECK, db_get_b(0, MODULENAME, "ss", 0), 0L);

	//sr checkbox
	SendMessage(hsr, BM_SETCHECK, db_get_b(0, MODULENAME, "sr", 0), 0L);
}

int onRegisterPopOptions(WPARAM wParam, LPARAM)
{
	if (bPopupExists) {
		OPTIONSDIALOGPAGE odp = { sizeof(odp) };
		odp.hInstance = g_hInst;
		odp.pszTemplate = MAKEINTRESOURCE(IDD_POPUP);
		odp.pszTitle = (char*)MODULENAME;
		odp.pszGroup = LPGEN("Popups");
		odp.pfnDlgProc = PopOptionsDlgProc;
		Options_AddPage(wParam, &odp);
	}
	return 0;
}

// EOF