// DlgSSParams.cpp : implementation file
//

#include "stdafx.h"
#include "6046dryend.h"
#include "DlgSSParams.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

int		CDlgSSParams::m_aiRange[RANGE_CELLS] = { 25, 50, 75, 150, 200, 300, 400 };

/////////////////////////////////////////////////////////////////////////////
// CDlgSSParams dialog


CDlgSSParams::CDlgSSParams(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgSSParams::IDD, pParent)
{
	
	m_dSensorIndex = 2;  //default
	m_bPingEnabled = TRUE;

	m_dRange = m_dPower = 0;

	//{{AFX_DATA_INIT(CDlgSSParams)
	m_strPower = _T("");
	m_strPulse = _T("");
	m_strRange = _T("");
	//}}AFX_DATA_INIT


}


void CDlgSSParams::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgSSParams)
	DDX_Control(pDX, IDC_COMBO_PULSEFILES, m_ctrlComboPulse);
	DDX_Control(pDX, IDC_UPDATE_HFSS, m_ctrlUpdate);
	DDX_Control(pDX, IDC_RANGEUP_HFSS, m_ctrlRangeUp);
	DDX_Control(pDX, IDC_RANGEDOWN_HFSS, m_ctrlRangeDown);
	DDX_Control(pDX, IDC_PE_HFSS, m_ctrlPEHFSS);
	DDX_Control(pDX, IDC_POWERUP_HFSS, m_ctrlPowerUp);
	DDX_Control(pDX, IDC_POWERDOWN_HFSS, m_ctrlPowerDown);
	DDX_Control(pDX, IDC_POWER_HFSS, m_ctrlPower);
	DDX_Control(pDX, IDC_RANGE_HFSS, m_ctrlRange);
	DDX_Text(pDX, IDC_POWER_HFSS, m_strPower);
	DDX_Text(pDX, IDC_RANGE_HFSS, m_strRange);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgSSParams, CDialog)
	//{{AFX_MSG_MAP(CDlgSSParams)
	ON_BN_CLICKED(IDC_PE_HFSS, OnPeHfss)
	ON_BN_CLICKED(IDC_POWERDOWN_HFSS, OnPowerdownHfss)
	ON_BN_CLICKED(IDC_POWERUP_HFSS, OnPowerupHfss)
	ON_BN_CLICKED(IDC_RANGEDOWN_HFSS, OnRangedownHfss)
	ON_BN_CLICKED(IDC_RANGEUP_HFSS, OnRangeupHfss)
	ON_BN_CLICKED(IDC_UPDATE_HFSS, OnUpdateHfss)
	ON_WM_DESTROY()
	ON_WM_CANCELMODE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgSSParams message handlers


BOOL CDlgSSParams::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	m_pConfig = &((CMy6046DryEndApp*)AfxGetApp())->m_SystemConfig;

	//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_ctrlPEHFSS.SetShade(SHS_METAL,8,40,18,RGB(0,155,0));
	m_ctrlUpdate.SetShade(SHS_METAL,8,40,6,RGB(55,0,0));

	m_pMainWnd = (CMy6046DryEndDlg*)AfxGetMainWnd();
	
	m_ctrlPEHFSS.SetCheck(m_bPingEnabled);
	m_ctrlPEHFSS.SetWindowText("ENABLED");

	UpdateData(FALSE);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDlgSSParams::SetSensorIndex(UINT index)
{
//	TRACE("SETTING HFSS INDEX, ID: %d\r\n", index);
	m_dSensorIndex = index;
	m_pMainWnd->RemoteGetPulseFiles(index);

}

DWORD CDlgSSParams::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 CDlgSSParams::SetCurrentPower( UINT  power )
{

	return 1;
}

void CDlgSSParams::OnOK() 
{
	// TODO: Add extra validation here
	
	//CDialog::OnOK();
}

void CDlgSSParams::OnPeHfss() 
{
	m_bPingEnabled = !m_bPingEnabled;
	
	if(m_bPingEnabled)
	{
		m_ctrlPEHFSS.SetWindowText("ENABLED");
		m_ctrlPEHFSS.SetShade(SHS_METAL,8,40,18,RGB(0,155,0));
	}
	else
	{
		m_ctrlPEHFSS.SetWindowText("DISABLED");
		m_ctrlPEHFSS.SetShade(SHS_METAL,8,40,18,RGB(77,0,0));
	}
	
}

void CDlgSSParams::OnPowerdownHfss() 
{
	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 CDlgSSParams::OnPowerupHfss() 
{
	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 CDlgSSParams::OnRangedownHfss() 
{
	if(m_dRange == 0)
		return;

	m_dRange	-= 1;

	m_strRange.Format("%d", m_aiRange[m_dRange]);
	UpdateData(FALSE);

}

void CDlgSSParams::OnRangeupHfss() 
{
	if(m_dRange == RANGE_CELLS-1)
		return;

	m_dRange	+= 1;

	m_strRange.Format("%d", m_aiRange[m_dRange]);
	UpdateData(FALSE);

}

void CDlgSSParams::OnUpdateHfss() 
{
	//remove deltas check
	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();
}

void CDlgSSParams::LoadSettings()
{
	if(m_pConfig->Open(CSystemConfig::accessRead))
	{	
		m_pConfig->Read();
		m_pConfig->Close();
		m_dRange	= m_pConfig->dHFSSRange;
		m_dPower	= m_pConfig->dHFSSPower;
	}

}

void CDlgSSParams::SaveSettings()
{
	m_pConfig->dHFSSRange   = m_dRange;
	m_pConfig->dHFSSPower	= m_dPower;
	
	if(m_pConfig->Open(CSystemConfig::accessWrite))
	{	
		m_pConfig->Save();
		m_pConfig->Close();
	}
}

void CDlgSSParams::OnDestroy() 
{
	SaveSettings();

	m_ctrlUpdate.~CxShadeButton();
	m_ctrlRangeUp.~CxShadeButton();
	m_ctrlRangeDown.~CxShadeButton();
	m_ctrlPEHFSS.~CxShadeButton();
	m_ctrlPowerUp.~CxShadeButton();
	m_ctrlPowerDown.~CxShadeButton();

	CDialog::OnDestroy();
	
}

void CDlgSSParams::OnCancelMode() 
{
	CDialog::OnCancelMode();
	
	// TODO: Add your message handler code here
	
}

void CDlgSSParams::AddPulseFile(CString fileName)
{
	m_ctrlComboPulse.AddString(fileName);
}

BOOL CDlgSSParams::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);
}
