// DLG_CliSmsTD.cpp : implementation file
//

#include "stdafx.h"
#include "smsmanager.h"
#include "DLG_CliSmsTD.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// DLG_CliSmsTD dialog
#include "DLG_CliSmsTD_Modify.h"

DLG_CliSmsTD::DLG_CliSmsTD(CWnd* pParent /*=NULL*/)
	: CDialog(DLG_CliSmsTD::IDD, pParent)
{
	//{{AFX_DATA_INIT(DLG_CliSmsTD)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT

	m_pTD = NULL;
	m_bRefresh = false;
	m_pReqTD = NULL;
	m_lReqSize = 0;
}


void DLG_CliSmsTD::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(DLG_CliSmsTD)
	DDX_Control(pDX, IDD_CLISMSTD_TELCOM, m_wndTelcom);
	DDX_Control(pDX, IDD_CLISMSTD_CW, m_B_CW);
	DDX_Control(pDX, IDD_CLISMSTD_UNICOM, m_wndUnicom);
	DDX_Control(pDX, IDD_CLISMSTD_PHS, m_wndPhs);
	DDX_Control(pDX, IDD_CLISMSTD_CMCC, m_wndCmcc);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(DLG_CliSmsTD, CDialog)
	//{{AFX_MSG_MAP(DLG_CliSmsTD)
	ON_NOTIFY(LVN_ITEMCHANGED, IDD_CLISMSTD_CMCC, OnItemchangedClismstdCmcc)
	ON_NOTIFY(LVN_ITEMCHANGED, IDD_CLISMSTD_UNICOM, OnItemchangedClismstdUnicom)
	ON_NOTIFY(LVN_ITEMCHANGED, IDD_CLISMSTD_PHS, OnItemchangedClismstdPhs)
	ON_NOTIFY(LVN_ITEMCHANGED, IDD_CLISMSTD_TELCOM, OnItemchangedClismstdTelcom)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// DLG_CliSmsTD message handlers

BOOL DLG_CliSmsTD::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here

	//����ͼ���б�
	m_wndCmcc.SetTextBkColor( RGB(237,238,188) );
	//���ó��ȼ�����ʽ
	m_wndCmcc.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES);

	m_wndCmcc.InsertColumn( 0 , _T("  ʵ��ͨ��") , LVCFMT_LEFT , 90 , 0);
	m_wndCmcc.InsertColumn( 1 , _T("�ͻ�����ʾͨ������") , LVCFMT_LEFT , 200 , 1);
	m_wndCmcc.SetTextColor( RGB( 0 , 0 , 255 ) );
	
	m_wndUnicom.SetTextBkColor( RGB(237,238,188) );
	//���ó��ȼ�����ʽ
	m_wndUnicom.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES);
	m_wndUnicom.InsertColumn( 0 , _T("  ʵ��ͨ��") , LVCFMT_LEFT , 90 , 0);
	m_wndUnicom.InsertColumn( 1 , _T("�ͻ�����ʾͨ������") , LVCFMT_LEFT , 200 , 1);
	m_wndUnicom.SetTextColor( RGB( 0 , 0 , 255 ) );

	m_wndPhs.SetTextBkColor( RGB(237,238,188) );
	//���ó��ȼ�����ʽ
	m_wndPhs.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES);
	m_wndPhs.InsertColumn( 0 , _T("  ʵ��ͨ��") , LVCFMT_LEFT , 90 , 0);
	m_wndPhs.InsertColumn( 1 , _T("�ͻ�����ʾͨ������") , LVCFMT_LEFT , 200 , 1);
	m_wndPhs.SetTextColor( RGB( 0 , 0 , 255 ) );

	m_wndTelcom.SetTextBkColor( RGB(237,238,188) );
	//���ó��ȼ�����ʽ
	m_wndTelcom.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES);
	m_wndTelcom.InsertColumn( 0 , _T("  ʵ��ͨ��") , LVCFMT_LEFT , 90 , 0);
	m_wndTelcom.InsertColumn( 1 , _T("�ͻ�����ʾͨ������") , LVCFMT_LEFT , 200 , 1);
	m_wndTelcom.SetTextColor( RGB( 0 , 0 , 255 ) );


	m_B_CW.SetCheck(m_pTD->bCliTD_CW);

	SC_CliTD     * pRetTD_Cmcc   = (SC_CliTD    *)((BYTE*)m_pTD+sizeof(ANS_CliSmsTD));
	SC_CliTD     * pRetTD_Unicom = (SC_CliTD    *)((BYTE*)m_pTD+sizeof(ANS_CliSmsTD)+sizeof(SC_CliTD)*(m_pTD->lCliTD_Cmcc));
	SC_CliTD     * pRetTD_Phs    = (SC_CliTD    *)((BYTE*)m_pTD+sizeof(ANS_CliSmsTD)+sizeof(SC_CliTD)*(m_pTD->lCliTD_Cmcc+m_pTD->lCliTD_Unicom));
	SC_CliTD     * pRetTD_Telcom = (SC_CliTD    *)((BYTE*)m_pTD+sizeof(ANS_CliSmsTD)+sizeof(SC_CliTD)*(m_pTD->lCliTD_Cmcc+m_pTD->lCliTD_Unicom+m_pTD->lCliTD_Phs));

	m_bRefresh = true;
	//���ƶ�����
	int j=0;
	for ( int i=0 ; i< 41; i++ )
	{
		CString strSrcTD;
		if ( i== 0 )
			strSrcTD = _T("��0ͨ��");
		if ( i>0 && i<10 )
			strSrcTD.Format( _T("��%dͨ��"),i );
		if ( i== 10 )
			strSrcTD = _T("��10ͨ��");
		if ( i>10 )
			strSrcTD.Format( _T("��%dͨ��"),i-1 );

		m_wndCmcc.InsertItem( i , strSrcTD );
		if (j<m_pTD->lCliTD_Cmcc &&  (TCHAR)('0'+i) == pRetTD_Cmcc[j].cSrcTD )
		{
			m_wndCmcc.SetCheck(i);
			m_wndCmcc.SetItemText(i,1,pRetTD_Cmcc[j].szTDName);
			j++;
		}
	}
	//����ͨ����
	j=0;
	for ( i=0 ; i< 41; i++ )
	{
		CString strSrcTD;
		if (i == 0)
			strSrcTD = _T("��0ͨ��");
		if (i > 0 && i < 10)
			strSrcTD.Format(_T("��%dͨ��"), i);
		if (i == 10)
			strSrcTD = _T("��10ͨ��");
		if (i > 10)
			strSrcTD.Format(_T("��%dͨ��"), i - 1);

		m_wndUnicom.InsertItem( i , strSrcTD );
		if (j<m_pTD->lCliTD_Unicom && (TCHAR)('0'+i) == pRetTD_Unicom[j].cSrcTD )
		{
			m_wndUnicom.SetCheck(i);
			m_wndUnicom.SetItemText(i,1,pRetTD_Unicom[j].szTDName);
			j++;
		}
	}

	//��С��ͨ����
	j=0;
	for ( i=0 ; i< 41; i++ )
	{
		CString strSrcTD;
		if (i == 0)
			strSrcTD = _T("��0ͨ��");
		if (i > 0 && i < 10)
			strSrcTD.Format(_T("��%dͨ��"), i);
		if (i == 10)
			strSrcTD = _T("��10ͨ��");
		if (i > 10)
			strSrcTD.Format(_T("��%dͨ��"), i - 1);

		m_wndPhs.InsertItem( i , strSrcTD );
		if (j<m_pTD->lCliTD_Phs && (TCHAR)('0'+i) == pRetTD_Phs[j].cSrcTD )
		{
			m_wndPhs.SetCheck(i);
			m_wndPhs.SetItemText(i,1,pRetTD_Phs[j].szTDName);
			j++;
		}
	}
	//���������
	j=0;
	for ( i=0 ; i<41 ; i++ )
	{
		CString strSrcTD;
		if (i == 0)
			strSrcTD = _T("��0ͨ��");
		if (i > 0 && i < 10)
			strSrcTD.Format(_T("��%dͨ��"), i);
		if (i == 10)
			strSrcTD = _T("��10ͨ��");
		if (i > 10)
			strSrcTD.Format(_T("��%dͨ��"), i - 1);

		m_wndTelcom.InsertItem( i , strSrcTD );
		if (j<m_pTD->lCliTD_Telcom && (TCHAR)('0'+i) == pRetTD_Telcom[j].cSrcTD )
		{
			m_wndTelcom.SetCheck(i);
			m_wndTelcom.SetItemText(i,1,pRetTD_Telcom[j].szTDName);
			j++;
		}
	}

	m_wndCmcc.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);
	m_wndCmcc.SetColumnWidth(1, LVSCW_AUTOSIZE_USEHEADER);
	m_wndUnicom.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);
	m_wndUnicom.SetColumnWidth(1, LVSCW_AUTOSIZE_USEHEADER);
	m_wndPhs.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);
	m_wndPhs.SetColumnWidth(1, LVSCW_AUTOSIZE_USEHEADER);
	m_wndTelcom.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);
	m_wndTelcom.SetColumnWidth(1, LVSCW_AUTOSIZE_USEHEADER);

	m_bRefresh = false;

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void DLG_CliSmsTD::SetParam(ANS_CliSmsTD *pTD)
{
	m_pTD = pTD;
}

void DLG_CliSmsTD::OnItemchangedClismstdCmcc(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	*pResult = 0;

//	if ( !m_wndCmcc.GetFirstSelectedItemPosition() )
//		return ;

	if ( m_bRefresh )
		return ;

	//ԭ�ǽ��ã�����������
	if ( pNMListView->uNewState==8192 && pNMListView->uOldState== 4096 )
	{
		CString strName = m_wndCmcc.GetItemText(pNMListView->iItem , 1 );
		DLG_CliSmsTD_Modify dlg(this);
		dlg.SetParam(strName);
		if ( dlg.DoModal() == IDOK )
		{
			m_wndCmcc.SetItemText(pNMListView->iItem,1,dlg.m_strTDName);
		}
		else
		{
			m_wndCmcc.SetCheck(pNMListView->iItem,false);
		}

	}
	//ԭ�����ã������ǽ���
	if ( pNMListView->uNewState==4096 && pNMListView->uOldState== 8192 )
	{
		//m_wndCmcc.SetItemText(pNMListView->iItem,1,_T(""));
	}
}

void DLG_CliSmsTD::OnItemchangedClismstdUnicom(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	*pResult = 0;

	if ( m_bRefresh )
		return ;

	//ԭ�ǽ��ã�����������
	if ( pNMListView->uNewState==8192 && pNMListView->uOldState== 4096 )
	{
		CString strName = m_wndUnicom.GetItemText(pNMListView->iItem , 1 );
		DLG_CliSmsTD_Modify dlg(this);
		dlg.SetParam(strName);
		if ( dlg.DoModal() == IDOK )
		{
			m_wndUnicom.SetItemText(pNMListView->iItem,1,dlg.m_strTDName);
		}
		else
		{
			m_wndUnicom.SetCheck(pNMListView->iItem,false);
		}

	}
	//ԭ�����ã������ǽ���
	if ( pNMListView->uNewState==4096 && pNMListView->uOldState== 8192 )
	{
		//m_wndUnicom.SetItemText(pNMListView->iItem,1,_T(""));
	}
}

void DLG_CliSmsTD::OnItemchangedClismstdPhs(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	*pResult = 0;

	if ( m_bRefresh )
		return ;

	//ԭ�ǽ��ã�����������
	if ( pNMListView->uNewState==8192 && pNMListView->uOldState== 4096 )
	{
		CString strName = m_wndPhs.GetItemText(pNMListView->iItem , 1 );
		DLG_CliSmsTD_Modify dlg(this);
		dlg.SetParam(strName);
		if ( dlg.DoModal() == IDOK )
		{
			m_wndPhs.SetItemText(pNMListView->iItem,1,dlg.m_strTDName);
		}
		else
		{
			m_wndPhs.SetCheck(pNMListView->iItem,false);
		}

	}
	//ԭ�����ã������ǽ���
	if ( pNMListView->uNewState==4096 && pNMListView->uOldState== 8192 )
	{
		//m_wndPhs.SetItemText(pNMListView->iItem,1,_T(""));
	}
}

void DLG_CliSmsTD::OnOK() 
{
	REQ_CliSmsTD m_TD={0};
	m_TD.lType = 1; //��ͨ��
	m_TD.bCliTD_CW = m_B_CW.GetCheck();
	//��ȡ����
	m_TD.lCliTD_Cmcc = 0;
	for (int i = 0; i < m_wndCmcc.GetItemCount(); i++)
	{
		if(m_wndCmcc.GetCheck(i))
			m_TD.lCliTD_Cmcc++;
	}
	m_TD.lCliTD_Unicom = 0;
	for (i = 0; i < m_wndUnicom.GetItemCount(); i++)
	{
		if(m_wndUnicom.GetCheck(i))
			m_TD.lCliTD_Unicom++;
	}
	m_TD.lCliTD_Phs = 0;
	for (i = 0; i < m_wndPhs.GetItemCount(); i++)
	{
		if(m_wndPhs.GetCheck(i))
			m_TD.lCliTD_Phs++;
	}
	m_TD.lCliTD_Telcom = 0;
	for (i = 0; i < m_wndTelcom.GetItemCount(); i++)
	{
		if(m_wndTelcom.GetCheck(i))
			m_TD.lCliTD_Telcom++;
	}

	m_lReqSize = sizeof(REQ_CliSmsTD)+sizeof(SC_CliTD)*(m_TD.lCliTD_Cmcc+m_TD.lCliTD_Unicom+m_TD.lCliTD_Phs+m_TD.lCliTD_Telcom);
	BYTE * pData = new BYTE[m_lReqSize];
	memset(pData , 0 , m_lReqSize );
	REQ_CliSmsTD * pRetTD        = (REQ_CliSmsTD*)pData;
	SC_CliTD     * pRetTD_Cmcc   = (SC_CliTD    *)(pData+sizeof(REQ_CliSmsTD));
	SC_CliTD     * pRetTD_Unicom = (SC_CliTD    *)(pData+sizeof(REQ_CliSmsTD)+sizeof(SC_CliTD)*(m_TD.lCliTD_Cmcc));
	SC_CliTD     * pRetTD_Phs    = (SC_CliTD    *)(pData+sizeof(REQ_CliSmsTD)+sizeof(SC_CliTD)*(m_TD.lCliTD_Cmcc+m_TD.lCliTD_Unicom));
	SC_CliTD     * pRetTD_Telcom = (SC_CliTD    *)(pData+sizeof(REQ_CliSmsTD)+sizeof(SC_CliTD)*(m_TD.lCliTD_Cmcc+m_TD.lCliTD_Unicom+m_TD.lCliTD_Phs));


	*pRetTD = m_TD;

	int j=0;
	for (i = 0; i < m_wndCmcc.GetItemCount(); i++)
	{
		if(m_wndCmcc.GetCheck(i))
		{
			pRetTD_Cmcc[j].cSrcTD = (TCHAR)('0'+i);
			m_wndCmcc.GetItemText(i,1,pRetTD_Cmcc[j].szTDName,sizeof(pRetTD_Cmcc[j].szTDName));
			j++;
		}
	}
	j=0;
	for (i = 0; i < m_wndUnicom.GetItemCount(); i++)
	{
		if(m_wndUnicom.GetCheck(i))
		{
			pRetTD_Unicom[j].cSrcTD = (TCHAR)('0'+i);
			m_wndUnicom.GetItemText(i,1,pRetTD_Unicom[j].szTDName,sizeof(pRetTD_Unicom[j].szTDName));
			j++;
		}
	}
	
	j=0;
	for (i = 0; i < m_wndPhs.GetItemCount(); i++)
	{
		if(m_wndPhs.GetCheck(i))
		{
			pRetTD_Phs[j].cSrcTD = (TCHAR)('0'+i);
			m_wndPhs.GetItemText(i,1,pRetTD_Phs[j].szTDName,sizeof(pRetTD_Phs[j].szTDName));
			j++;
		}
	}
	j=0;
	for (i = 0; i < m_wndTelcom.GetItemCount(); i++)
	{
		if(m_wndTelcom.GetCheck(i))
		{
			pRetTD_Telcom[j].cSrcTD = (TCHAR)('0'+i);
			m_wndTelcom.GetItemText(i,1,pRetTD_Telcom[j].szTDName,sizeof(pRetTD_Telcom[j].szTDName));
			j++;
		}
	}
	m_pReqTD= pData;

	CDialog::OnOK();
}

void DLG_CliSmsTD::OnItemchangedClismstdTelcom(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	
	*pResult = 0;

	if ( m_bRefresh )
		return ;

	//ԭ�ǽ��ã�����������
	if ( pNMListView->uNewState==8192 && pNMListView->uOldState== 4096 )
	{
		CString strName = m_wndTelcom.GetItemText(pNMListView->iItem , 1 );
		DLG_CliSmsTD_Modify dlg(this);
		dlg.SetParam(strName);
		if ( dlg.DoModal() == IDOK )
		{
			m_wndTelcom.SetItemText(pNMListView->iItem,1,dlg.m_strTDName);
		}
		else
		{
			m_wndTelcom.SetCheck(pNMListView->iItem,false);
		}

	}
	//ԭ�����ã������ǽ���
	if ( pNMListView->uNewState==4096 && pNMListView->uOldState== 8192 )
	{
		//m_wndTelcom.SetItemText(pNMListView->iItem,1,_T(""));
	}
}