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

#include "stdafx.h"
#include "LonLatDlg.h"
//#include "afxdialogex.h"
#include "Globe.h"
#include "afxwin.h"
#include "afxdialogex.h"

// CLonLatDlg ¶Ô»°¿ò

IMPLEMENT_DYNAMIC(CLonLatDlg, CDialog)

CLonLatDlg::CLonLatDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CLonLatDlg::IDD, pParent)
{
	//EnableVisualManagerStyle(TRUE, TRUE);
	m_lon = 0.0;
	m_lat = 0.0;
	posTypeID = 0;
}

CLonLatDlg::~CLonLatDlg()
{
}

void CLonLatDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT_LON, m_lon);
	DDX_Text(pDX, IDC_EDIT_LAT, m_lat);
	DDX_Control(pDX, IDC_EDIT_LON, m_lon_edit);
	DDX_Control(pDX, IDC_EDIT_LAT, m_lat_edit);
	DDX_Control(pDX, IDC_COMBO_TYPE_XY, m_coord_type);
	DDX_Control(pDX, IDC_CONFIRM_BTN, m_BtnOK);
}


BEGIN_MESSAGE_MAP(CLonLatDlg, CDialog)
	ON_BN_CLICKED(IDC_CONFIRM_BTN, &CLonLatDlg::OnBnClickedConfirmBtn)
	ON_BN_CLICKED(IDC_CHECK1, &CLonLatDlg::OnBnClickedCheck1)
	ON_CBN_SELCHANGE(IDC_COMBO_TYPE_XY, &CLonLatDlg::OnCbnSelchangeComboType)
END_MESSAGE_MAP()

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

//»ñÈ¡ÊÇ·ñÊÖ¶¯ÊäÈë״̬
bool CLonLatDlg::GetAutoEditStatus()
{
	return m_isMouseMove;
}


//ÊäÈë¾­¶È¡¢Î³¶È£¬²¢ÏÔʾ³öÀ´
//ÊäÈ룺¾­¶Èlon£¬Î³¶Èlat
void CLonLatDlg::SetLonLatInfo(const double lon, const double lat)
{
	if (posTypeID==0) //¶È
	{
		m_lon = lon;
		m_lat = lat;
		UpdateData(FALSE);
	}
	else if (posTypeID==1)	// ¶È·ÖÃë
	{
		string str_lat,str_lon;
		angle.getDMSString(lon,lat,str_lon,str_lat);
		SetDlgItemText(IDC_EDIT_LON,str_lon.c_str());
		SetDlgItemText(IDC_EDIT_LAT,str_lat.c_str());
	}
	
}

void CLonLatDlg::OnCancel()
{
	//·¢ËÍÖ÷³ÌÐò£¬±êʶÒѾ­¹Ø±Õ
	if (g_mapHwnd != NULL)
	{
		::PostMessage(g_mapHwnd, WM_CLOSE_LONLAT_DIALOG, 0, 0);
	}

	CDialog::OnCancel();
}


//¹¦ÄÜ£ºÒƶ¯¶Ô»°¿òµ½¸ø¶¨µÄÏÔÊ¾ÇøÓò
void CLonLatDlg::MoveToGivenArea(const CRect rcArea)
{
	m_rcDlgArea = rcArea;
	m_rcDlgArea.top += 20;
}

BOOL CLonLatDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	SetWindowPos( &CWnd::wndTop, m_rcDlgArea.left, m_rcDlgArea.top, 0, 0,	SWP_NOSIZE | SWP_NOACTIVATE | SWP_HIDEWINDOW );

	m_CheckBox.SubclassDlgItem(IDC_CHECK1, this);
	m_CheckBox.SetCheck(BST_UNCHECKED); // ÉèÖÃĬÈÏδѡÖÐ״̬

	m_isMouseMove = true;
	m_coord_type.AddString(_T("¶È"));
	m_coord_type.AddString(_T("¶È·ÖÃë"));
	m_coord_type.SetCurSel(0);
	lastTypeID = 0;
	return TRUE;  // return TRUE unless you set the focus to a control
	// Òì³£: OCX ÊôÐÔÒ³Ó¦·µ»Ø FALSE
}


void CLonLatDlg::OnBnClickedConfirmBtn()
{
	// TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë
	
	CString str_lon;
	CString str_lat;
	GetDlgItemText(IDC_EDIT_LON, str_lon);
	GetDlgItemText(IDC_EDIT_LAT, str_lat);
	double lon = _tstof(str_lon);
	double lat = _tstof(str_lat);
	//::SendMessage(g_mapHwnd, WM_SEND_MAPLOCATION, WPARAM(_tstof(lon)*1000000), LPARAM(_tstof(lat)*1000000));
	::SendMessage(g_mapHwnd, WM_SEND_MAPLOCATION, (WPARAM)&lon, (LPARAM)&lat);
}


// ¡®ÊÖ¶¯ÊäÈ롯µ¥Ñ¡¿ò±ä»¯Ê±´¥·¢º¯Êý
void CLonLatDlg::OnBnClickedCheck1()
{
	// TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë
	if (m_CheckBox.GetCheck() == BST_CHECKED)
	{
		// ¸´Ñ¡¿ò±»Ñ¡ÖÐ
		m_isMouseMove =  false;
		// Îı¾¿òÉèΪ¿É±à¼­
		m_lon_edit.SetReadOnly(FALSE);
		m_lat_edit.SetReadOnly(FALSE);
	}
	else
	{
		// ¸´Ñ¡¿òδѡÖÐ
		m_isMouseMove =  true;
		// Îı¾¿òÉèΪֻ¶Á
		m_lon_edit.SetReadOnly(TRUE);
		m_lat_edit.SetReadOnly(TRUE);
	}
}


// ×ø±êÀàÐ͸ıäʼþ
void CLonLatDlg::OnCbnSelchangeComboType()
{
	std::string splitSymbol = "EWNSs+\/-,;¡ã¶È¡ä£§¡¯·Ö\"£¢¡±Ãë¡¢£¬£» ";
	CString strLat,strLon;
	m_lat_edit.GetWindowTextA(strLat);
	m_lon_edit.GetWindowTextA(strLon);
	
	posTypeID = m_coord_type.GetCurSel();
	//TRACE(_T("µ±Ç°Ñ¡Ôñ %d\n"),posTypeID);
	if (lastTypeID == posTypeID) //ÀàÐÍδ¸Ä±ä£¬²»Ö´ÐÐ×ø±ê±ä»»
	{
		return;
	}
	else
	{
		lastTypeID = posTypeID;	// ¸üÐÂ×ø±ê·½Ê½
	}

	if (posTypeID==0) //¶È
	{
		double tarLon,tarLat;

		vector<string> vec_lat = angle.split(strLat.GetBuffer(),splitSymbol);
		vector<string> vec_lon = angle.split(strLon.GetBuffer(),splitSymbol);

		int lon_d = stoi(vec_lon.at(0));
		int lon_m = stoi(vec_lon.at(1));
		double lon_s = stod(vec_lon.at(2));
		angle.DmstoDeg(lon_d,lon_m,lon_s,tarLon);

		int lat_d = stoi(vec_lat.at(0));
		int lat_m = stoi(vec_lat.at(1));
		double lat_s = stod(vec_lat.at(2));
		angle.DmstoDeg(lat_d,lat_m,lat_s,tarLat);


		SetDlgItemText(IDC_EDIT_LON,angle.DoubleToString(tarLon).c_str());
		SetDlgItemText(IDC_EDIT_LAT,angle.DoubleToString(tarLat).c_str());
	}
	else if (posTypeID==1) //¶È·ÖÃë
	{
		double lat,lon;
		lat = _tstof(strLat);
		lon = _tstof(strLon);

		string str_lat,str_lon;
		angle.getDMSString(lon,lat,str_lon,str_lat);

		SetDlgItemText(IDC_EDIT_LON,str_lon.c_str());
		SetDlgItemText(IDC_EDIT_LAT,str_lat.c_str());
	}
}