// DlgSSParams2.cpp : implementation file
//

#include "stdafx.h"
#include "6046dryend.h"
#include "DlgSSParams2.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

int		CDlgSSParams2::m_aiRange[RANGE_CELLS] = {25, 50, 75, 150, 200, 300, 400};

/////////////////////////////////////////////////////////////////////////////
// CDlgSSParams2 dialog


CDlgSSParams2::CDlgSSParams2(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgSSParams2::IDD, pParent)
{

	m_dSensorIndex = 1; //default
	m_bPingEnabled = TRUE;

	m_dRange = m_dPower = 0;

	//{{AFX_DATA_INIT(CDlgSSParams2)
	m_strPower = _T("");
	m_strRange = _T("");
	//}}AFX_DATA_INIT
}


void CDlgSSParams2::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgSSParams2)
	DDX_Control(pDX, IDC_COMBO_PULSEFILES, m_ctrlComboPulse);
	DDX_Control(pDX, IDC_UPDATE_LFSS, m_ctrlUpdate);
	DDX_Control(pDX, IDC_RANGEUP_LFSS, m_ctrlRangeUp);
	DDX_Control(pDX, IDC_RANGEDOWN_LFSS, m_ctrlRangeDown);
	DDX_Control(pDX, IDC_POWERUP_LFSS, m_ctrlPowerUp);
	DDX_Control(pDX, IDC_POWERDOWN_LFSS, m_ctrlPowerDown);
	DDX_Control(pDX, IDC_PE_LFSS, m_ctrlPELFSS);
	DDX_Control(pDX, IDC_POWER_LFSS, m_ctrlPower);
	DDX_Text(pDX, IDC_POWER_LFSS, m_strPower);
	DDX_Text(pDX, IDC_RANGE_LFSS, m_strRange);
	DDX_Control(pDX, IDC_RANGE_LFSS, m_ctrlRange);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgSSParams2, CDialog)
	//{{AFX_MSG_MAP(CDlgSSParams2)
	ON_BN_CLICKED(IDC_RANGEUP_LFSS, OnRangeupLfss)
	ON_BN_CLICKED(IDC_RANGEDOWN_LFSS, OnRangedownLfss)
	ON_BN_CLICKED(IDC_POWERUP_LFSS, OnPowerupLfss)
	ON_BN_CLICKED(IDC_POWERDOWN_LFSS, OnPowerdownLfss)
	ON_BN_CLICKED(IDC_PE_LFSS, OnPeLfss)
	ON_BN_CLICKED(IDC_UPDATE_LFSS, OnUpdateLfss)
	ON_BN_DOUBLECLICKED(IDC_RANGEDOWN_LFSS, OnDoubleclickedRangedownLfss)
	ON_BN_DOUBLECLICKED(IDC_RANGEUP_LFSS, OnDoubleclickedRangeupLfss)
	ON_BN_DOUBLECLICKED(IDC_POWERDOWN_LFSS, OnDoubleclickedPowerdownLfss)
	ON_BN_DOUBLECLICKED(IDC_POWERUP_LFSS, OnDoubleclickedPowerupLfss)
	ON_WM_DESTROY()
	ON_WM_CANCELMODE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgSSParams2 message handlers


BOOL CDlgSSParams2::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	m_pConfig  = &((CMy6046DryEndApp*)AfxGetApp())->m_SystemConfig; 
	m_pMainWnd = (CMy6046DryEndDlg*)AfxGetMainWnd();
	
	//fill in settings arrays
	for(int i=0; i<POWER_CELLS; i++)
		m_aiPower[i] = i;

	LoadSettings();

	m_strRange.Format("%d", m_aiRange[m_dRange]);
	m_strPower.Format("%d%%", m_aiPower[m_dPower]);
	
	//Gain m_ctrlRange
	m_ctrlRange.SetBkColor(RGB(0,35,0));
	m_ctrlRange.SetTextColor(RGB(0,255,0));
	m_ctrlRangeUp.SetShade(SHS_METAL,8,40,18,RGB(0,55,0));
	m_ctrlRangeUp.SetIcon(IDI_ICON_ARROWUP, BS_CENTER, 0);
	m_ctrlRangeDown.SetShade(SHS_METAL,8,40,18,RGB(0,55,0));
	m_ctrlRangeDown.SetIcon(IDI_ICON_ARROWDOWN, BS_CENTER, 0);
	//Power 
	m_ctrlPower.SetBkColor(RGB(0,35,0));
	m_ctrlPower.SetTextColor(RGB(0,255,0));
	m_ctrlPowerUp.SetShade(SHS_METAL,8,40,18,RGB(0,55,0));
	m_ctrlPowerUp.SetIcon(IDI_ICON_ARROWUP, BS_CENTER, 0);
	m_ctrlPowerDown.SetShade(SHS_METAL,8,40,18,RGB(0,55,0));
	m_ctrlPowerDown.SetIcon(IDI_ICON_ARROWDOWN, BS_CENTER, 0);
	
	m_ctrlPELFSS.SetShade(SHS_METAL,8,40,18,RGB(0,155,0));
	m_ctrlUpdate.SetShade(SHS_METAL,8,40,6,RGB(55,0,0));

	m_ctrlPELFSS.SetCheck(m_bPingEnabled);
	m_ctrlPELFSS.SetWindowText("ENABLED");

	UpdateData(FALSE);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDlgSSParams2::SetSensorIndex(UINT index)
{
//	TRACE("SETTING LFSS INDEX, ID: %d\r\n", index);
	m_dSensorIndex = index;
	m_pMainWnd->RemoteGetPulseFiles(index);
}


DWORD CDlgSSParams2::SetCurrentRange( float range )
{
	for(int i = 0; i<RANGE_CELLS; i++)
	{
		if(m_aiRange[i] == range)
		{
			m_dRange = i;
			m_strRange.Format("%d", m_aiRange[m_dRange]);
			UpdateData(FALSE);
			return 1;
		}
	}

	return 0;
}

DWORD CDlgSSParams2::SetCurrentPower( UINT  power )
{

	return 1;
}


void CDlgSSParams2::OnOK() 
{
	// TODO: Add extra validation here
	
	//CDialog::OnOK();
}

void CDlgSSParams2::OnRangeupLfss() 
{
	if(m_dRange == RANGE_CELLS-1)
		return;

	m_dRange	+= 1;

	m_strRange.Format("%d", m_aiRange[m_dRange]);
	UpdateData(FALSE);
}

void CDlgSSParams2::OnRangedownLfss() 
{
	if(m_dRange == 0)
		return;

	m_dRange	-= 1;

	m_strRange.Format("%d", m_aiRange[m_dRange]);
	UpdateData(FALSE);
}

void CDlgSSParams2::OnPowerupLfss() 
{
	if(m_dPower == POWER_CELLS-1)
		return;

	short state = GetKeyState(VK_CONTROL);

	if((state < 0) && (m_dPower+10 <= POWER_CELLS-1))
	{
		m_dPower	+= 10;

		m_strPower.Format("%d%%", m_aiPower[m_dPower]);
		UpdateData(FALSE);
		return;
	}

	m_dPower	+= 1;

	m_strPower.Format("%d%%", m_aiPower[m_dPower]);
	UpdateData(FALSE);

}

void CDlgSSParams2::OnPowerdownLfss() 
{
	if(m_dPower == 0)
		return;

	short state = GetKeyState(VK_CONTROL);

	if((state < 0) && (m_dPower-10 >= 0))
	{
		m_dPower	-= 10;

		m_strPower.Format("%d%%", m_aiPower[m_dPower]);
		UpdateData(FALSE);
		return;
	}

	m_dPower	-= 1;

	m_strPower.Format("%d%%", m_aiPower[m_dPower]);
	UpdateData(FALSE);
	
}

void CDlgSSParams2::OnPeLfss() 
{
	m_bPingEnabled = !m_bPingEnabled;

	if(m_bPingEnabled)
	{
		m_ctrlPELFSS.SetWindowText("ENABLED");
		m_ctrlPELFSS.SetShade(SHS_METAL,8,40,18,RGB(0,155,0));

	}
	else
	{
		m_ctrlPELFSS.SetWindowText("DISABLED");
		m_ctrlPELFSS.SetShade(SHS_METAL,8,40,18,RGB(77,0,0));
	}
	
}

void CDlgSSParams2::OnUpdateLfss() 
{
	m_pMainWnd->RemotePingEnable(m_dSensorIndex, m_bPingEnabled);
	m_pMainWnd->RemoteSetRange(m_dSensorIndex, m_aiRange[m_dRange]);
	m_pMainWnd->RemoteSetPower(m_dSensorIndex, m_aiPower[m_dPower]);
	CString pulse;
	int sel = m_ctrlComboPulse.GetCurSel();
	if(sel > -1)
	{
		m_ctrlComboPulse.GetLBText(sel, pulse);
		m_pMainWnd->RemoteSetPulse(m_dSensorIndex, pulse);
	}
	SaveSettings();

	//m_bDeltaRange = m_bDeltaPower = m_bDeltaPing = m_bDeltaPulse =  FALSE;
}

void CDlgSSParams2::OnDoubleclickedRangedownLfss() 
{
	// TODO: Add your control notification handler code here
	
}

void CDlgSSParams2::OnDoubleclickedRangeupLfss() 
{
	// TODO: Add your control notification handler code here
	
}

void CDlgSSParams2::OnDoubleclickedPowerdownLfss() 
{
	// TODO: Add your control notification handler code here
	
}

void CDlgSSParams2::OnDoubleclickedPowerupLfss() 
{
	// TODO: Add your control notification handler code here
	
}

void CDlgSSParams2::LoadSettings()
{

	if(m_pConfig->Open(CSystemConfig::accessRead))
	{	
		m_pConfig->Read();
		m_pConfig->Close();
		m_dRange	= m_pConfig->dLFSSRange;
		m_dPower	= m_pConfig->dLFSSPower;
	}
	
}

void CDlgSSParams2::SaveSettings()
{
	m_pConfig->dLFSSRange   = m_dRange;
	m_pConfig->dLFSSPower	= m_dPower;
	
	if(m_pConfig->Open(CSystemConfig::accessWrite))
	{	
		m_pConfig->Save();
		m_pConfig->Close();
	}
}

void CDlgSSParams2::OnDestroy() 
{
	m_ctrlUpdate.~CxShadeButton();
	m_ctrlRangeUp.~CxShadeButton();
	m_ctrlRangeDown.~CxShadeButton();
	m_ctrlPowerUp.~CxShadeButton();
	m_ctrlPowerDown.~CxShadeButton();
	m_ctrlPELFSS.~CxShadeButton();

	CDialog::OnDestroy();
}

void CDlgSSParams2::OnCancelMode() 
{
	CDialog::OnCancelMode();
	
	// TODO: Add your message handler code here
	
}

void CDlgSSParams2::AddPulseFile(CString fileName)
{
	m_ctrlComboPulse.AddString(fileName);
}

BOOL CDlgSSParams2::PreTranslateMessage(MSG* pMsg) 
{
	if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
	{
		return TRUE ;
	}
	if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_CANCEL)
	{
		return TRUE ;
	}
	
	return CDialog::PreTranslateMessage(pMsg);
}
