// WaypointControlDlg.cpp : implementation file
//

#include "stdafx.h"
#include "dashboard.h"
#include "WaypointControlDlg.h"
#include "DashboardRecipient.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CWaypointControlDlg dialog


CWaypointControlDlg::CWaypointControlDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CWaypointControlDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CWaypointControlDlg)
	m_underway = FALSE;
	m_circleRad = _T("0");
	m_depth = _T("0");
	m_duration = _T("0");
	m_rpm = _T("0");
	//}}AFX_DATA_INIT
}


void CWaypointControlDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CWaypointControlDlg)
	DDX_Control(pDX, IDC_WC_NORTHINGS, m_northingsCtrl);
	DDX_Control(pDX, IDC_WC_LONGITUDE, m_longitudeCtrl);
	DDX_Control(pDX, IDC_WC_LATITUDE, m_latitudeCtrl);
	DDX_Control(pDX, IDC_WC_EASTINGS, m_eastingsCtrl);
	DDX_Text(pDX, IDC_WC_CIRCLERAD, m_circleRad);
	DDX_Text(pDX, IDC_WC_DEPTH, m_depth);
	DDX_Text(pDX, IDC_WAYCON_DUR, m_duration);
	DDX_Text(pDX, IDC_WAYCON_RPM, m_rpm);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CWaypointControlDlg, CDialog)
	//{{AFX_MSG_MAP(CWaypointControlDlg)
	ON_BN_CLICKED(IDC_WC_INIT, OnWcInit)
	ON_BN_CLICKED(IDC_WC_STOP, OnWcStop)
	ON_BN_CLICKED(IDC_GEO_MODE, OnGeoMode)
	ON_BN_CLICKED(IDC_UTM_MODE, OnUtmMode)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL CWaypointControlDlg::OnInitDialog()
{
	BOOL val = CDialog::OnInitDialog();
	onReinit();
	UpdateData(False);

	CheckRadioButton(IDC_UTM_MODE, IDC_GEO_MODE, IDC_UTM_MODE);
	m_inUTMMode = True;
	
	m_latitudeCtrl.SetText("0.0");
	m_longitudeCtrl.SetText("0.0");
	m_northingsCtrl.SetText("0.0");
	m_eastingsCtrl.SetText("0.0");

	m_latitudeCtrl.EnableWindow(False);
	m_longitudeCtrl.EnableWindow(False);

	m_wayConStatus.SubclassDlgItem(IDC_WAYCON_STATUS,this);
		
	return val;
}
/////////////////////////////////////////////////////////////////////////////
// CWaypointControlDlg message handlers

void CWaypointControlDlg::onReinit()
{
	m_recipient->setMission("WaypointControl.mis", "abortSimple.cfg",1);
	requestUpdate();
}

void CWaypointControlDlg::requestUpdate()
{
	m_recipient->requestData(MMAgentRequest::Start,
		ModemMessage::tMMControlExecute,3);
}

void CWaypointControlDlg::stopUpdate()
{
	m_recipient->requestData(MMAgentRequest::Stop,
		ModemMessage::tMMControlExecute,-1);
}

void CWaypointControlDlg::OnWcInit() 
{
	UpdateData(True);

	CString temp;
	CString hold;

	if(m_inUTMMode) {
		hold.Format("%g,%g,", m_northingsCtrl.GetTextAsDouble(),m_eastingsCtrl.GetTextAsDouble());
		temp = "waypointControlStart,UTM,"+hold+m_depth + "," + m_circleRad+","+m_duration+","+m_rpm;  
	} else {
		hold.Format("%g,%g,", m_latitudeCtrl.GetTextAsDouble(),m_longitudeCtrl.GetTextAsDouble());
		temp = "waypointControlStart,GEO,"+hold+m_depth + "," + m_circleRad+","+m_duration+","+m_rpm;  
	}

	m_recipient->setString(temp.GetBuffer(0));

}

void CWaypointControlDlg::OnWcStop() 
{
	m_recipient->setString("waypointControlStop");
}

void CWaypointControlDlg::OnGeoMode() 
{
	if(IDC_UTM_MODE == GetCheckedRadioButton(IDC_UTM_MODE, IDC_GEO_MODE)) return;
	
	CheckRadioButton(IDC_UTM_MODE, IDC_GEO_MODE, IDC_GEO_MODE);

	m_latitudeCtrl.EnableWindow(True);
	m_longitudeCtrl.EnableWindow(True);
	m_northingsCtrl.EnableWindow(False);
	m_eastingsCtrl.EnableWindow(False);

	m_inUTMMode = False;

	UpdateData(False);	
}

void CWaypointControlDlg::OnUtmMode() 
{
	if(IDC_GEO_MODE == GetCheckedRadioButton(IDC_UTM_MODE, IDC_GEO_MODE)) return;
	
	CheckRadioButton(IDC_UTM_MODE, IDC_GEO_MODE, IDC_UTM_MODE);

	m_latitudeCtrl.EnableWindow(False);
	m_longitudeCtrl.EnableWindow(False);
	m_northingsCtrl.EnableWindow(True);
	m_eastingsCtrl.EnableWindow(True);

	m_inUTMMode = True;

	UpdateData(False);
}

void CWaypointControlDlg::OnClose() 
{
	CDialog::OnClose();
	m_recipient->requestData(MMAgentRequest::Single,
			ModemMessage::tMMAbortMission,-1);
	stopUpdate();
}

void CWaypointControlDlg::OnOK() 
{
	m_recipient->requestData(MMAgentRequest::Single,
			ModemMessage::tMMAbortMission,-1);
	stopUpdate();
	CDialog::OnOK();
}

void CWaypointControlDlg::setControlExecute(CString str)
{
	m_wayConStatus.setControlExecuteStatus(str);
}
