// TargetDlg.cpp : ʵÏÖÎļþ
//

#include "stdafx.h"
#include "TargetDlg.h"
#include "afxdialogex.h"
#include "Globe.h"

#include "MapElevation.h"

MapElevation m_mapElevation1;

// CTargetDlg ¶Ô»°¿ò

IMPLEMENT_DYNAMIC(CTargetDlg, CDialogEx)

CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CTargetDlg::IDD, pParent)
	, m_targetID(1)
	, m_targetLon(0)
	, m_targetLat(0)
	, m_targetAlt(0)
{

}

CTargetDlg::~CTargetDlg()
{
}

void CTargetDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT_TARGET_ID, m_targetID);
	DDV_MinMaxInt(pDX, m_targetID, 1, 255);
	DDX_Text(pDX, IDC_EDIT_TARGET_LON, m_targetLon);
	DDV_MinMaxDouble(pDX, m_targetLon, -180.0, 180.0);
	DDX_Text(pDX, IDC_EDIT_TARGET_LAT, m_targetLat);
	DDV_MinMaxDouble(pDX, m_targetLat, -90.0, 90.0);
	DDX_Text(pDX, IDC_EDIT_TARGET_ALT, m_targetAlt);
	DDV_MinMaxDouble(pDX, m_targetAlt, 0, 9999);
}


BEGIN_MESSAGE_MAP(CTargetDlg, CDialogEx)
	ON_BN_CLICKED(IDC_BUTTON_ADD_TARGET, &CTargetDlg::OnBnClickedButtonAddTarget)
	ON_WM_SHOWWINDOW()
	ON_BN_CLICKED(IDC_BUTTON_SELECT_TARGET, &CTargetDlg::OnBnClickedButtonSelectTarget)
END_MESSAGE_MAP()


// CTargetDlg ÏûÏ¢´¦Àí³ÌÐò


BOOL CTargetDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	m_targetCount = 0;
	m_targetID = m_targetCount+1;
	for (int i = 0;i<255;i++)
	{
		m_bExistFlags[i] = false;
	}
	return TRUE;
}


void CTargetDlg::SetTargetCount(int count)
{
	m_targetCount = count;
}

void CTargetDlg::SetExistFlag(int id,bool b)
{
	if (id>0&&id<255)
	{
		m_bExistFlags[id-1] = b;
	}
}

void CTargetDlg::GetTargetLLA(int &id,double &lon,double &lat,double &alt)
{
	id = m_targetID;
	lon = m_targetLon;
	lat = m_targetLat;
	alt = m_targetAlt;
}

//Ìí¼ÓÄ¿±êµã
void CTargetDlg::OnBnClickedButtonAddTarget()
{
	UpdateData(TRUE);
	
	CString strID;
	strID.Format("%d",m_targetID);

	CString strLon = "";
	strLon.Format("%.5f",m_targetLon);

	CString strLat = "";
	strLat.Format("%.5f",m_targetLat);

	CString strAlt = "";
	strAlt.Format("%.0f",m_targetAlt);

	CString fileName = GetSoftwareCurrentDirectory() + "\\target.ini";

	WritePrivateProfileString(strID,"lon",strLon.GetBuffer(), fileName);
	WritePrivateProfileString(strID,"lat",strLat.GetBuffer(), fileName);
	WritePrivateProfileString(strID,"alt",strAlt.GetBuffer(), fileName);

	::SendMessage(g_mapHwnd,WM_DRAW_TARGET,NULL,NULL);

	m_targetCount++;

	CDialog::OnCancel();
}


void CTargetDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
	CDialogEx::OnShowWindow(bShow, nStatus);

	// TODO: ÔÚ´Ë´¦Ìí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂë
	for(int i=0;i<255;i++)
	{
		if (m_bExistFlags[i] == false)
		{
			m_targetID = i+1;
			break;
		}
	}
	m_targetLon = 0.0;
	m_targetLat = 0.0;
	m_targetAlt = 0.0;
	UpdateData(FALSE);
}

//ÔÚµØÍ¼ÉÏÑ¡µã
void CTargetDlg::OnBnClickedButtonSelectTarget()
{
	::SendMessage(g_mapHwnd,WM_SEND_SELECTTARGET,0,0);
}

//ÔÚ¶Ô»°¿òÀïÏÔʾѡÔñµãµÄ×ø±êºÍ¸ß³Ì
void CTargetDlg::ShowPointPosition(double ptLon, double ptLat)
{
	CString str;

	str.Format(_T("%.7f"),ptLon);
	GetDlgItem(IDC_EDIT_TARGET_LON)->SetWindowText(str);

	str.Format(_T("%.7f"),ptLat);
	GetDlgItem(IDC_EDIT_TARGET_LAT)->SetWindowText(str);

	//»ñÈ¡¸ß³Ì
	float ptAlt = 0.0f;
	if(!m_mapElevation1.getElevation(ptAlt, ptLon, ptLat))
	{
		ptAlt = 0.0f;
	}

	str.Format(_T("%.1f"),ptAlt);
	GetDlgItem(IDC_EDIT_TARGET_ALT)->SetWindowText(str);
}