// TXSPDlg.cpp : implementation file
//
#include "stdafx.h"
#include "ylgl.h"
#include "TXSPDlg.h"
#include "MyMdi.H"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


IMPLEMENT_DYNCREATE(TXSPDlg, MyFormView)

TXSPDlg::TXSPDlg(): MyFormView(TXSPDlg::IDD)
{
	m_taoxiid = _T("");
	m_taoxijiage = _T("");
	m_zs = _T("");
}

TXSPDlg::~TXSPDlg()
{
}

void TXSPDlg::DoDataExchange(CDataExchange* pDX)
{
	MyFormView::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST2, m_List2);
	DDX_Control(pDX, IDC_LIST1, m_List1);
	DDX_Control(pDX, IDC_STATIC1, m_static1);
	DDX_Control(pDX, IDC_COMBOtaoxiname, m_combotaoxiname);
	DDX_Text(pDX, IDC_EDITtaoxiid, m_taoxiid);
	DDX_Text(pDX, IDC_EDITtaoxijiage, m_taoxijiage);
	DDX_Text(pDX, IDC_EDITzs, m_zs);
	DDX_Control(pDX, CB_KINDS, m_cbKinds);
}

BEGIN_MESSAGE_MAP(TXSPDlg, MyFormView)
	ON_BN_CLICKED(IDC_BUTsave, OnBUTsave)
	ON_BN_CLICKED(IDC_BUTdel, OnBUTdel)
	ON_BN_CLICKED(IDC_BUTclose, OnBUTclose)
	ON_CBN_SELCHANGE(IDC_COMBOtaoxiname, OnSelchangeCOMBOtaoxiname)
	ON_BN_CLICKED(IDC_BUTspbox, OnBUTspbox)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_BUTsave2, OnBUTsave2)
	ON_BN_CLICKED(IDC_BUTdel2, OnBUTdel2)
	ON_BN_CLICKED(IDC_BUTspbox2, OnBUTspbox2)
	ON_BN_CLICKED(IDC_BUTclose2, OnBUTclose2)
	ON_CBN_SELCHANGE(CB_KINDS, OnCbnSelchangeKinds)
	ON_WM_SIZE()
END_MESSAGE_MAP()


#ifdef _DEBUG
void TXSPDlg::AssertValid() const
{
	MyFormView::AssertValid();
}

void TXSPDlg::Dump(CDumpContext& dc) const
{
	MyFormView::Dump(dc);
}
#endif 

void TXSPDlg::OnInitialUpdate()
{
	MyFormView::OnInitialUpdate();

	CMyMdi Mdi;
	Mdi.SetSubView((CWnd*)GetParent(), (CWnd*)this);

	CRect rc1, rc2;
	GetWindowRect(rc1);
	rc2 = rc1;
	rc1 = g_rc;
	ScreenToClient(&rc1);
	::MoveWindow(m_hWnd, g_rc.left, g_rc.top, g_rc.Width(), g_rc.Height(), TRUE);
	EnumChildWindows(m_hWnd, (WNDENUMPROC)EnumChildProc, 0);
	m_combotaoxiname.GetWindowRect(rc2);
	ScreenToClient(rc2);
	rc2.bottom += 200;
	m_combotaoxiname.MoveWindow(rc2);
	m_static1.SetFont(&g_titlefont);

	g_sendhead.bsql = 0;
	g_sendhead.code[0] = 6;
	g_sendhead.code[1] = 7;
	g_sendhead.code[2] = 10;
	g_sendhead.code[3] = 4;
	g_sendhead.tabcount = 4;
	g_pMainWnd->ProcessChatMessageRequest2(6); 
	if (g_bSendOK == 0)return;
	DataToArray(&m_List1array, &m_List2array, &m_List3array, &m_sparray);

	for (int i = 0; i < m_List1array.GetSize(); i++)
		m_combotaoxiname.AddString(m_List1array.ElementAt(i).ElementAt(1));

	m_List1.InitStyle();
	m_List1.InsertColumn(0, _T("���"), LVCFMT_LEFT, 80);
	m_List1.InsertColumn(1, _T("��Ʒ����"), LVCFMT_LEFT, 200);
	m_List1.InsertColumn(2, _T("����"), LVCFMT_LEFT, 60);

	m_List2.InitStyle();
	m_List2.InsertColumn(0, _T("���"), LVCFMT_LEFT, 80);
	m_List2.InsertColumn(1, _T("��Ʒ����"), LVCFMT_LEFT, 200);
	m_List2.InsertColumn(2, _T("����"), LVCFMT_LEFT, 60);
}

void TXSPDlg::OnSelchangeCOMBOtaoxiname()
{
	int pos = m_combotaoxiname.GetCurSel();
	if (pos == -1)return;
	m_taoxiid = m_List1array.ElementAt(pos).ElementAt(0);
	m_taoxijiage = m_List1array.ElementAt(pos).ElementAt(2);
	m_zs = m_List1array.ElementAt(pos).ElementAt(3);
	UpdateData(false);
	FillGrid();
}

void TXSPDlg::FillGrid()
{
	m_List1.DeleteAllItems();
	int pos = 0;
	int i = 0;
	for ( i = 0; i < m_List2array.GetSize(); i++)
	{
		if (m_List2array.ElementAt(i).ElementAt(0) != m_taoxiid)continue;
		m_List1.InsertItem(pos, m_List2array.ElementAt(i).ElementAt(1));
		m_List1.SetItemText(pos, 1, GetSPNameFromId(m_List2array.ElementAt(i).ElementAt(1)));
		m_List1.SetItemText(pos, 2, m_List2array.ElementAt(i).ElementAt(2));
		pos++;
	}
	//#ifndef MODERN_VERSION
#if 0
	for( i=0; i<m_List3array.GetSize (); i++)
	{
		if(m_List3array.ElementAt (i).ElementAt (0)!=m_taoxiid)continue;
		m_List1.InsertItem(pos, m_List3array.ElementAt (i).ElementAt (1));
		m_List1.SetItemText(pos,1, GetSPNameFromId(m_List3array.ElementAt (i).ElementAt (1)));
		m_List1.SetItemText(pos,2, m_List3array.ElementAt (i).ElementAt (2));
		pos++;
	}
#else
	m_List2.DeleteAllItems();
	pos = 0;
	for (i = 0; i < m_List3array.GetSize(); i++)
	{
		if (m_List3array.ElementAt(i).ElementAt(0) != m_taoxiid)continue;
		m_List2.InsertItem(pos, m_List3array.ElementAt(i).ElementAt(1));
		m_List2.SetItemText(pos, 1, GetSPNameFromId(m_List3array.ElementAt(i).ElementAt(1)));
		m_List2.SetItemText(pos, 2, m_List3array.ElementAt(i).ElementAt(2));
		pos++;
	}
#endif
}

CString TXSPDlg::GetSPNameFromId(CString id)
{
	int i = 0;
	for ( i = 0; i < m_sparray.GetSize(); i++)
	{
		if (id == m_sparray.ElementAt(i).ElementAt(0))
			return m_sparray.ElementAt(i).ElementAt(1);
	}
	id.TrimLeft("0");
	for (i = 0; i < m_sparray.GetSize(); i++)
	{
		if (id == m_sparray.ElementAt(i).ElementAt(0))
			return m_sparray.ElementAt(i).ElementAt(1);
	}

	return "";
}

BOOL TXSPDlg::PreTranslateMessage(MSG* pMsg)
{
	if (pMsg->message == WM_KEYDOWN)
	{
		switch (pMsg->wParam)
		{
		case 0x43: // copy
			if ((GetKeyState(VK_CONTROL) & 0x80))
			{
				GetFocus()->SendMessage(WM_COPY);
				return TRUE;
			}
			break;
		case 0x56: //Ctrl + V:
			if ((GetKeyState(VK_CONTROL) & 0x80))
			{
				GetFocus()->SendMessage(WM_PASTE);
				return TRUE;
			}
			break;
		case 0x58: // cut
			if ((GetKeyState(VK_CONTROL) & 0x80))
			{
				GetFocus()->SendMessage(WM_CUT);
				return TRUE;
			}
			break;
		case 0x5A: //undo
		case 0x59: //redo
			if ((GetKeyState(VK_CONTROL) & 0x80))
			{
				GetFocus()->SendMessage(WM_UNDO);
				return TRUE;
			}
			break;
		}
	}
	else if (pMsg->message == WM_LBUTTONDBLCLK)
	{
		if (0)
		{//list1
			CPoint pt;
			CRect rc, rc2;
			::GetCursorPos(&pt);
			m_List1.GetWindowRect(rc2);
			if (rc2.PtInRect(pt) == 0)	return MyFormView::PreTranslateMessage(pMsg);
			pt.x -= rc2.left;
			pt.y -= rc2.top;
			POSITION pos;
			pos = m_List1.GetFirstSelectedItemPosition();
			if (pos == NULL)return 1;
			int iItem = m_List1.GetNextSelectedItem(pos);

			m_List1.GetSubItemRect(iItem, 2, LVIR_BOUNDS, rc);

			if (rc.PtInRect(pt))
				return MyFormView::PreTranslateMessage(pMsg);
			else
				return 1;
		}
	}
	return MyFormView::PreTranslateMessage(pMsg);
}

void TXSPDlg::SetSPName1()
{
	for (int i = 0; i < m_List1.GetItemCount(); i++)
	{
		m_List1.SetItemText(i, 1, GetSPNameFromId(m_List1.GetItemText(i, 0)));
	}
}

void TXSPDlg::SetSPName2()
{
	for (int i = 0; i < m_List2.GetItemCount(); i++)
	{
		m_List2.SetItemText(i, 1, GetSPNameFromId(m_List2.GetItemText(i, 0)));
	}
}

void TXSPDlg::OnTimer(UINT nIDEvent)
{
	if (nIDEvent == 1)
	{
		KillTimer(nIDEvent);
		SetSPName1();
	}
	else if (nIDEvent == 2)
	{
		KillTimer(nIDEvent);
		SetSPName2();
	}
}

void TXSPDlg::OnBUTsave()
{
	int pos = m_combotaoxiname.GetCurSel();
	if (pos == -1)return;

	CArray<CStringArray, CStringArray>sparray;
	sparray.SetSize(m_List1.GetItemCount());
	int realcount = 0;
	for (int i = 0; i < m_List1.GetItemCount(); i++)
	{
		if (m_List1.GetItemText(i, 0).IsEmpty())continue;
		sparray.ElementAt(realcount).Add(m_List1array.ElementAt(pos).ElementAt(0));
		sparray.ElementAt(realcount).Add(m_List1.GetItemText(i, 0));
		sparray.ElementAt(realcount).Add(m_List1.GetItemText(i, 2));
		realcount++;
	}
	sparray.SetSize(realcount);
	if (realcount == 0)
	{
		sparray.SetSize(1);
		sparray.ElementAt(0).Add(m_List1array.ElementAt(pos).ElementAt(0));
	}

	CMemFile memfile;
	CArchive ar(&memfile, CArchive::store);
	for (int ii = 0; ii < sparray.GetSize(); ii++)
	{
		sparray.ElementAt(ii).Serialize(ar);
	}
	ar.Close();
	int length = memfile.GetLength();
	BYTE *pData = memfile.Detach();
	int size = sparray.GetSize();
	BYTE *pData2 = new BYTE[length + sizeof(int)];
	memcpy(pData2, pData, length);
	memcpy(pData2 + length, &size, sizeof(int));
	delete[]pData;
	length += sizeof(int);
	g_nSendCode = 1;
	g_pMainWnd->ProcessChatMessageRequest2(pData2, length);
	g_nSendCode = 0;
	delete[]pData2;
	if (g_bSendOK == 0)return;

	g_sendhead.bsql = 0;
	g_sendhead.code[0] = 7;
	g_sendhead.code[1] = 10;
	g_sendhead.tabcount = 2;
	g_pMainWnd->ProcessChatMessageRequest2(7); if (g_bSendOK == 0)return;
	DataToArray(&m_List2array, &m_List3array);
	AfxMessageBox("����ɹ�!", MB_ICONINFORMATION);
}

void TXSPDlg::OnBUTdel()
{
	POSITION pos;
	pos = m_List1.GetFirstSelectedItemPosition();
	if (pos == NULL)
	{
		AfxMessageBox("����ѡ����Ҫɾ������Ŀ!", MB_ICONINFORMATION);
		return;
	}
	int iItem = m_List1.GetNextSelectedItem(pos);
	m_List1.DeleteItem(iItem);
	int count = m_List1.GetItemCount();
	if (count == 0)return;
	if (iItem == count)
		iItem = 0;

	m_List1.SetItemState(iItem, LVIS_SELECTED, LVIS_SELECTED);
}

void TXSPDlg::OnBUTspbox()
{
	SPBox dlg;
	if (dlg.DoModal() != IDOK)return;
	for (int a = 0; a < dlg.m_spidarray.GetSize(); a++)
	{
		dlg.m_spid = dlg.m_spidarray.ElementAt(a);
		dlg.m_spname = dlg.m_spnamearray.ElementAt(a);
		dlg.m_lb = dlg.m_lbarray.ElementAt(a);
		int pos = m_List1.GetItemCount();
		if (pos)
		{
			if (m_List1.GetItemText(pos - 1, 0).IsEmpty() && m_List1.GetItemText(pos - 1, 1).IsEmpty() && m_List1.GetItemText(pos - 1, 2).IsEmpty())
			{
				pos--;
				m_List1.SetItemText(pos, 0, dlg.m_spid);
				m_List1.SetItemText(pos, 1, GetSPNameFromId(dlg.m_spid));
			}
			else
			{
				m_List1.InsertItem(pos, dlg.m_spid);
				m_List1.SetItemText(pos, 1, GetSPNameFromId(dlg.m_spid));
				m_List1.SetItemText(pos, 2, "1");
			}
		}
		else
		{
			m_List1.InsertItem(pos, dlg.m_spid);
			m_List1.SetItemText(pos, 1, GetSPNameFromId(dlg.m_spid));
			m_List1.SetItemText(pos, 2, "1");
		}
	}
}

void TXSPDlg::OnBUTclose()
{
	GetParent()->SendMessage(WM_CLOSE);
}

void TXSPDlg::OnBUTsave2()
{
	int pos = m_combotaoxiname.GetCurSel();
	if (pos == -1)return;

	CArray<CStringArray, CStringArray>sparray;
	sparray.SetSize(m_List2.GetItemCount());
	int realcount = 0;
	for (int i = 0; i < m_List2.GetItemCount(); i++)
	{
		if (m_List2.GetItemText(i, 0).IsEmpty())continue;
		sparray.ElementAt(realcount).Add(m_List1array.ElementAt(pos).ElementAt(0));
		sparray.ElementAt(realcount).Add(m_List2.GetItemText(i, 0));
		sparray.ElementAt(realcount).Add(m_List2.GetItemText(i, 2));
		realcount++;
	}
	sparray.SetSize(realcount);
	if (realcount == 0)
	{
		sparray.SetSize(1);
		sparray.ElementAt(0).Add(m_List1array.ElementAt(pos).ElementAt(0));
	}

	CMemFile memfile;
	CArchive ar(&memfile, CArchive::store);
	for (int ii = 0; ii < sparray.GetSize(); ii++)
	{
		sparray.ElementAt(ii).Serialize(ar);
	}
	ar.Close();
	int length = memfile.GetLength();
	BYTE *pData = memfile.Detach();
	int size = sparray.GetSize();
	BYTE *pData2 = new BYTE[length + sizeof(int)];
	memcpy(pData2, pData, length);
	memcpy(pData2 + length, &size, sizeof(int));
	delete[]pData;
	length += sizeof(int);
	g_nSendCode = 2;
	g_pMainWnd->ProcessChatMessageRequest2(pData2, length);
	g_nSendCode = 0;
	delete[]pData2;
	if (g_bSendOK == 0)return;

	g_sendhead.bsql = 0;
	g_sendhead.code[0] = 7;
	g_sendhead.code[1] = 10;
	g_sendhead.tabcount = 2;
	g_pMainWnd->ProcessChatMessageRequest2(7); if (g_bSendOK == 0)return;
	DataToArray(&m_List2array, &m_List3array);
	AfxMessageBox("����ɹ�!", MB_ICONINFORMATION);
}

void TXSPDlg::OnBUTdel2()
{
	POSITION pos;
	pos = m_List2.GetFirstSelectedItemPosition();
	if (pos == NULL)
	{
		AfxMessageBox("����ѡ����Ҫɾ������Ŀ!", MB_ICONINFORMATION);
		return;
	}
	int iItem = m_List2.GetNextSelectedItem(pos);
	m_List2.DeleteItem(iItem);
	int count = m_List2.GetItemCount();
	if (count == 0)return;
	if (iItem == count)
		iItem = 0;

	m_List2.SetItemState(iItem, LVIS_SELECTED, LVIS_SELECTED);
}

void TXSPDlg::OnBUTspbox2()
{
	SPBox dlg;
	dlg.m_mode = 1;
	if (dlg.DoModal() != IDOK)return;
	for (int a = 0; a < dlg.m_spidarray.GetSize(); a++)
	{
		dlg.m_spid = dlg.m_spidarray.ElementAt(a);
		dlg.m_spname = dlg.m_spnamearray.ElementAt(a);
		dlg.m_lb = dlg.m_lbarray.ElementAt(a);
		int pos = m_List2.GetItemCount();
		if (pos)
		{
			if (m_List2.GetItemText(pos - 1, 0).IsEmpty() && m_List2.GetItemText(pos - 1, 1).IsEmpty() && m_List2.GetItemText(pos - 1, 2).IsEmpty())
			{
				pos--;
				m_List2.SetItemText(pos, 0, dlg.m_spid);
				m_List2.SetItemText(pos, 1, GetSPNameFromId(dlg.m_spid));
				m_List2.SetItemText(pos, 2, "1");
			}
			else
			{
				m_List2.InsertItem(pos, dlg.m_spid);
				m_List2.SetItemText(pos, 1, GetSPNameFromId(dlg.m_spid));
				m_List2.SetItemText(pos, 2, "1");
			}
		}
		else
		{
			m_List2.InsertItem(pos, dlg.m_spid);
			m_List2.SetItemText(pos, 1, GetSPNameFromId(dlg.m_spid));
			m_List2.SetItemText(pos, 2, "1");
		}
	}
}

void TXSPDlg::OnBUTclose2()
{
	GetParent()->SendMessage(WM_CLOSE);
}

void TXSPDlg::OnCbnSelchangeKinds()
{

}

BOOL CALLBACK TXSPDlg::EnumChildProc1(HWND hwnd, LPARAM lParam)
{
	CSize sz = (CSize)lParam;
	CRect rtCtrl, rtWnd;		// �Ӵ���,������;
	if (hwnd)
	{
		::GetWindowRect(hwnd, &rtCtrl);				// ��ȡ�ؼ���С;
		::GetWindowRect(::GetParent(hwnd), &rtWnd);	// ��ȡ�����ڴ�С;

		((CWnd*)hwnd)->ScreenToClient(rtCtrl);
		rtCtrl.left += g_rc.left;
		rtCtrl.top += g_rc.top;
		rtCtrl.right += sz.cx;
		rtCtrl.bottom += sz.cy;

		::MoveWindow(hwnd, rtCtrl.left, rtCtrl.top, rtCtrl.Width(), rtCtrl.Height(), TRUE);
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}

// ��OnSize�п��Ի�ȡ�������꣺1.ԭʼ��, 2.����;
// 1.ԭʼ��:��һ�ε�Get cx,cy;
// 2.����:���һ��Get cx,cy;
void TXSPDlg::OnSize(UINT nType, int cx, int cy)
{
	MyFormView::OnSize(nType, cx, cy);
	static BOOL bDeal = FALSE;
	static CRect FirstRect(g_rc.left, g_rc.top, g_rc.left + cx, g_rc.top + cy);	// �ƶ���g_rc���ԭʼ��Ļ����;
	static CRect LastWindowRect( g_rc.left, g_rc.top, g_rc.right, g_rc.bottom );

	if ( bDeal == FALSE)
	{
		m_rcOld = FirstRect;
		bDeal = TRUE;
	}
}