// HeadingControlDlg.cpp : implementation file
//

#include "stdafx.h"
#include "dashboard.h"
#include "HeadingControlDlg.h"
#include "DashboardRecipient.h"
#include "remote/MMUtils.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CHeadingControlDlg dialog


CHeadingControlDlg::CHeadingControlDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CHeadingControlDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CHeadingControlDlg)
	m_headingEditVal = _T("0");
	m_depthVal = _T("0");
	m_durationVal = _T("0");
	//}}AFX_DATA_INIT
}


void CHeadingControlDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CHeadingControlDlg)
	DDX_Control(pDX, IDC_HEADCON_RPM, m_rpmCtrl);
	DDX_Text(pDX, IDC_HEACON_HEADINGEDIT, m_headingEditVal);
	DDX_Text(pDX, IDC_HEADCON_DEPTH, m_depthVal);
	DDX_Text(pDX, IDC_HEADCON_DUR, m_durationVal);
	DDX_Control(pDX, IDC_HEADCON_HEADINGKNOB, m_headingKnobVal);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CHeadingControlDlg, CDialog)
	//{{AFX_MSG_MAP(CHeadingControlDlg)
	ON_BN_CLICKED(IDC_HEADCON_FINISH, OnHeadconFinish)
	ON_BN_CLICKED(IDC_HEADCON_START, OnHeadconStart)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CHeadingControlDlg message handlers

BOOL CHeadingControlDlg::OnInitDialog()
{
	BOOL val = CDialog::OnInitDialog();
	onReinit();
	m_rpmCtrl.SetText("0");
	UpdateData(False);
	m_headConStatus.SubclassDlgItem(IDC_HEADCON_STATUS, this);
	return val;
}

void CHeadingControlDlg::onReinit()
{
	m_recipient->setMission("HeadingControl.mis", "abortSimple.cfg",1);
	requestUpdate();
}

void CHeadingControlDlg::requestUpdate()
{
	m_recipient->requestData(MMAgentRequest::Start,
		ModemMessage::tMMControlExecute,3);
}

void CHeadingControlDlg::stopUpdate()
{
	m_recipient->requestData(MMAgentRequest::Stop,
		ModemMessage::tMMControlExecute,-1);
}

void CHeadingControlDlg::OnHeadconFinish() 
{
	m_recipient->setString("headingControlStop,0");
}

void CHeadingControlDlg::OnHeadconStart() 
{
	UpdateData(True);
	//doing degToRad here instead of on vehicle
	CString temp;
	temp.Format("%d", m_rpmCtrl.GetTextAsLong());
	CString hold = "headingControlStart,"+m_durationVal+","+m_depthVal+","+temp+","+m_headingEditVal;
	m_recipient->setString(hold.GetBuffer(0));	
}

BEGIN_EVENTSINK_MAP(CHeadingControlDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CHeadingControlDlg)
	ON_EVENT(CHeadingControlDlg, IDC_HEADCON_HEADINGKNOB, 1 /* PointerValueChanged */, OnPointerValueChangedHeadconHeadingknob, VTS_I4 VTS_PVARIANT)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CHeadingControlDlg::OnPointerValueChangedHeadconHeadingknob(long Pointer, VARIANT FAR* Value) 
{
	UpdateData(True);
	m_headingEditVal.Format("%g", Value->dblVal);
	UpdateData(False);
}

void CHeadingControlDlg::OnClose() 
{
	//m_recipient->setString("headingControlExit");
	m_recipient->requestData(MMAgentRequest::Single,
			ModemMessage::tMMAbortMission,-1);
	CDialog::OnClose();
}

void CHeadingControlDlg::OnOK() 
{
	//m_recipient->setString("headingControlExit");
	m_recipient->requestData(MMAgentRequest::Single,
			ModemMessage::tMMAbortMission,-1);
	CDialog::OnOK();
}

void CHeadingControlDlg::setControlExecute(CString str)
{
	m_headConStatus.setControlExecuteStatus(str);
}
