// CAlarmSetpointDialog.cpp : implementation file
//

#include "stdafx.h"
#include "alarmdialog.h"
#include "wmmessage.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

enum messageIndex {OVERTEMP_M, OVERHUMIDITY_M, WARNING_M, READINGOK_M, INVALIDDATA_M};

const char *message[] = {
	"OVER TEMP     ",
	"OVER HUMIDITY ",
	"WARNING       ",
	"OK            ",
	"INVALID DATA  "
};
/////////////////////////////////////////////////////////////////////////////
// CAlarmSetpointDialog dialog


CAlarmSetpointDialog::CAlarmSetpointDialog(CWnd* pParent /*=NULL*/)
	: CDialog(CAlarmSetpointDialog::IDD, pParent)
{
	m_tempColor = BAD_READING_COLOR;
	m_rhColor = BAD_READING_COLOR;
	
	m_temp = BADREADING;
	m_rh = BADREADING;

	//{{AFX_DATA_INIT(CAlarmSetpointDialog)
	m_OverTemp = BADREADING;
	m_OverRH = BADREADING;
	m_WarnRH = BADREADING;
	m_WarnTemp = BADREADING;
	//}}AFX_DATA_INIT
}


void CAlarmSetpointDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAlarmSetpointDialog)
	DDX_Text(pDX, IDC_OVERTEMP, m_OverTemp);
	DDV_MinMaxDouble(pDX, m_OverTemp, 0., 100.);
	DDX_Text(pDX, IDC_OVERRH, m_OverRH);
	DDV_MinMaxDouble(pDX, m_OverRH, 0., 100.);
	DDX_Text(pDX, IDC_WARNRH, m_WarnRH);
	DDV_MinMaxDouble(pDX, m_WarnRH, 0., 100.);
	DDX_Text(pDX, IDC_WARNTEMP, m_WarnTemp);
	DDV_MinMaxDouble(pDX, m_WarnTemp, 0., 100.);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAlarmSetpointDialog, CDialog)
	ON_MESSAGE(WM_HOUSEKEEPINGDATA, UpdateHousekeepingData)
	//{{AFX_MSG_MAP(CAlarmSetpointDialog)
	ON_BN_CLICKED(IDC_SETOVERTEMP, OnSetOverTemp)
	ON_BN_CLICKED(IDC_SETWARNTEMP, OnSetWarnTemp)
	ON_BN_CLICKED(IDC_SETOVERRH, OnSetOverRH)
	ON_BN_CLICKED(IDC_SETWARNRH, OnSetWarnRH)
	ON_WM_SHOWWINDOW()
	ON_WM_CTLCOLOR()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAlarmSetpointDialog message handlers

void CAlarmSetpointDialog::OnSetOverTemp() 
{
	UpdateData(TRUE);
	m_pSetpoints->overtemp = m_OverTemp;
	UpdateAlarmDisplay();
	
}

void CAlarmSetpointDialog::OnSetWarnTemp() 
{
	UpdateData(TRUE);
	m_pSetpoints->warntemp = m_WarnTemp;
	UpdateAlarmDisplay();	
}

void CAlarmSetpointDialog::OnSetOverRH() 
{
	UpdateData(TRUE);
	m_pSetpoints->overrh = m_OverRH;
	UpdateAlarmDisplay();	
	
}

void CAlarmSetpointDialog::OnSetWarnRH() 
{	
	UpdateData(TRUE);
	m_pSetpoints->warnrh = m_WarnRH;
	UpdateAlarmDisplay();		
}
BOOL CAlarmSetpointDialog::Create(CWnd* pParent, const char *dialogtitle, CLrsClient::HousekeepingSetPoints *setpoints)
{
	m_pSetpoints = setpoints;
	m_OverTemp = m_pSetpoints->overtemp;
	m_OverRH = m_pSetpoints->overrh;
	m_WarnRH = m_pSetpoints->warnrh;
	m_WarnTemp = m_pSetpoints->warntemp;	
	CDialog::Create(CAlarmSetpointDialog::IDD, pParent);
	SetWindowText(dialogtitle);	
	return TRUE;

}
void CAlarmSetpointDialog::UpdateAlarmDisplay()
{

	enum messageIndex {OVERTEMP, OVERHUMIDITY, WARNING, READINGOK, INVALIDDATA};

	if(m_temp >= m_pSetpoints->overtemp) {
		m_tempColor = ALARM_COLOR;
		SetDlgItemText(IDC_TEMPALARMSTATUS, message[OVERTEMP]);	
	}
	else if(m_temp >=  m_pSetpoints->warntemp) {
		m_tempColor = WARNING_COLOR;
		SetDlgItemText(IDC_TEMPALARMSTATUS, message[WARNING]);	
	}
	else {
		if(m_temp != BADREADING) {
			m_tempColor = SYSTEM_GREY;
			SetDlgItemText(IDC_TEMPALARMSTATUS, message[READINGOK]);	
		}
		else {
			m_tempColor = BAD_READING_COLOR;
			SetDlgItemText(IDC_TEMPALARMSTATUS, message[INVALIDDATA]);
		}
	}
	

	if(m_rh >= m_pSetpoints->overrh) {
		m_rhColor = ALARM_COLOR;
		SetDlgItemText(IDC_RHALARMSTATUS, message[OVERHUMIDITY]);	
	}
	else if(m_rh >=  m_pSetpoints->warnrh) {
		m_rhColor = WARNING_COLOR;
		SetDlgItemText(IDC_RHALARMSTATUS, message[WARNING]);	
	}
	else {		
		if(m_rh != BADREADING) {			
			m_rhColor = SYSTEM_GREY;
			SetDlgItemText(IDC_RHALARMSTATUS, message[READINGOK]);				
		}
		else {
			m_rhColor = BAD_READING_COLOR;
			SetDlgItemText(IDC_RHALARMSTATUS,  message[INVALIDDATA]);				
		}

	}

}

BOOL CAlarmSetpointDialog::OnInitDialog() 
{	
	CWnd *pWnd;

	pWnd = GetDlgItem(IDC_TEMPALARMSTATUS);
//	pWnd->EnableWindow(FALSE);

	pWnd = GetDlgItem(IDC_RHALARMSTATUS);
//	pWnd->EnableWindow(FALSE);

	CDialog::OnInitDialog();
			
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

// CLrsStatusDialog message handlers
LRESULT CAlarmSetpointDialog::UpdateHousekeepingData(WPARAM wParam, LPARAM lParam)
{
	LRS::HousekeepingData *data = (LRS::HousekeepingData *) lParam;
	CString s;

	if(data != 0) 	{
		m_temp = data->temp;
		s.Format("%12.2lf",m_temp);
		SetDlgItemText(IDC_STATIC_TEMP, s);

		m_rh = data->rh;
		s.Format("%12.2lf",m_rh);
		SetDlgItemText(IDC_STATIC_RH, s);

		UpdateAlarmDisplay();
	}

	return 0L;
}

void CAlarmSetpointDialog::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
	
	// TODO: Add your message handler code here
	UpdateAlarmDisplay();	
}

HBRUSH CAlarmSetpointDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
int ID;
COLORREF color;
CBrush brush;	
		
	if( nCtlColor == CTLCOLOR_EDIT)
	{	
		ID = pWnd->GetDlgCtrlID();

		switch (ID){
		case IDC_RHALARMSTATUS:
			color = m_rhColor;			
			brush.CreateSolidBrush(color);	
			pDC->SetBkColor(color);
			return brush;		
			break;
		case IDC_TEMPALARMSTATUS:
			color = m_tempColor;
			brush.CreateSolidBrush(color);	
			pDC->SetBkColor(color);
			return brush;		
			break;
		default:
			return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);	
			break;
		}//end switch		
	}
	
		return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
