// FMsg.cpp : implementation file
//

#include "stdafx.h"
#include "corpsms.h"
#include "FMsg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CFMsg dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_Msg_See.h"


CFMsg::CFMsg(CWnd* pParent /*=NULL*/)
	: CDialog(CFMsg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFMsg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_bInit = false;
	m_bRefresh = false;
}


void CFMsg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFMsg)
	DDX_Control(pDX, IDC_MSG_LIST, m_wndList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFMsg, CDialog)
	//{{AFX_MSG_MAP(CFMsg)
	ON_WM_SIZE()
	ON_NOTIFY(NM_DBLCLK, IDC_MSG_LIST, OnDblclkMsgList)
	ON_NOTIFY(NM_RCLICK, IDC_MSG_LIST, OnRclickMsgList)
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
	ON_COMMAND( MENU_MSG_SEE     , On_Msg_See )
	ON_COMMAND( MENU_MSG_REFRESH , On_Msg_Refresh )
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFMsg message handlers

BOOL CFMsg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	//ȡ�ù��ò���
	//CMainFrame * pFrame = static_cast <CMainFrame *>((CMainFrame *)AfxGetMainWnd());
	this->GetParent()->GetParentFrame();
	m_pMainFrame = (CMainFrame *)this->GetParent()->GetParentFrame();
	m_pSocket    = &m_pMainFrame->m_Socket;
	m_AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection );

	//��ʼ��List
	m_Image.Create(16,16,ILC_COLOR32|ILC_MASK,5,5);
	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_CJLOG) );
	m_wndList.SubClassWindow2();
	m_wndList.SetHeadings(_T("���,50;    ������,180;����ʱ��,90; ����,90;     ����,250"));
	m_wndList.SetGridLines(true);
	m_wndList.SetImageList(&m_Image,LVSIL_SMALL);
	//m_wndList.SetBkColor( RGB(237,191,175) );
	//m_wndList.SetTextBkColor( RGB(237,191,175) );

	m_bInit = true;

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

void CFMsg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	if ( m_bInit )
	{
		m_wndList.MoveWindow( 0 , 0 , cx,cy);
	}
}

BOOL CFMsg::ReHide()
{
	ShowWindow( SW_HIDE );
	return true;
}

BOOL CFMsg::ReShow(BOOL bRefresh)
{
	ShowWindow( SW_SHOW );
	if ( bRefresh || !m_bRefresh )
	{
		RefreshInfo();
	}
	return true;
}

void CFMsg::RefreshInfo()
{
#ifndef MOBSET_OEM
	REQ_Msg_See * pSee = new REQ_Msg_See;
	pSee->lCorpID = m_pMainFrame->m_lCorpID;
	pSee->lUserID = m_pMainFrame->m_lUserID;
	m_pMainFrame->SendFrame( SMSFUNC_MSG_SEE , (BYTE*)pSee , sizeof( REQ_Msg_See ) );  //����ȡ���ϵ�����
#endif
}

BOOL CFMsg::ProcessSocket(Socket_Head *pHead)
{

	//ȡ������Ϣ
	if (pHead->lFuncType == SMSFUNC_MSG_SEE)
	{
		m_bRefresh = true;  //�Ѿ�ˢ�¹�
		ANS_Msg_See     * pSee = (ANS_Msg_See *)pHead->pFrame;
		ANS_Msg_SeeData * pData = (ANS_Msg_SeeData *)(pHead->pFrame+sizeof(ANS_Msg_See));
		m_wndList.ShowWindow( SW_HIDE );
		m_wndList.DeleteAllItems(); //ɾ��ԭ�е�����
		Close_Msg();
		TCHAR Buf[128];
		BOOL bTip = false;
		for ( int i=0;i<pSee->lCount;i++ )
		{
			//m_wndList.SetHeadings(_T("���,50;    ������,180;   ������,120;����ʱ��,90; ����,90;     ����,180"));
			
			ANS_Msg_SeeData * pNewData = new ANS_Msg_SeeData;
			*pNewData = *pData;
			POSITION pos = m_Msg.AddTail(pNewData);

			_stprintf(Buf , _T("%d") , pSee->lCount-i );
			m_wndList.InsertItem( i , Buf ,0 );
			m_wndList.SetItemData( i , (DWORD_PTR)pos );    //��Pos

			if ( pData->lSCorpID == 0 )
				_stprintf(Buf, _T("����Ա"));
			else
				if ( pData->lSCorpID == -1 )
					_stprintf(Buf, _T("����"));
				else
					_stprintf(Buf, _T("%s") , pData->szSLoginName);
			m_wndList.SetItemText(i,1,Buf);
/*
			if ( pData->lRCorpID == 0 )
				_stprintf(Buf, _T("����Ա"));
			else
				if ( pData->lRCorpID == -1 )
					_stprintf(Buf, _T("����"));
				else
					_stprintf(Buf, _T("%d") , pData->lRCorpID);

			m_wndList.SetItemText(i,2,Buf);
*/
			_stprintf(Buf, _T("%04d.%02d.%02d") , pData->tSendTime.wYear,pData->tSendTime.wMonth,pData->tSendTime.wDay);
			m_wndList.SetItemText(i,2,Buf);

			m_wndList.SetItemText(i,3,pData->szType);
			m_wndList.SetItemText(i,4,pData->szBZ);

			if ( (pData->lSUserID != m_pMainFrame->m_lUserID) )  //�����ҷ����ģ��ж�ʱ��
			{
				COleDateTimeSpan tAdd(5,0,0,0); //3��
				COleDateTime tSend(pData->tSendTime);
				if (pData->lBBSID>m_pMainFrame->m_Setup.lLastBBSID && 
					tSend.GetStatus()== COleDateTime::valid && 
					COleDateTime::GetCurrentTime() < tSend+tAdd )
				{
					//m_pMainFrame->m_Setup.lLastBBSID = pData->lBBSID;  //�������һ�ε�ID
					//m_pMainFrame->SaveSetup();
					bTip = true;
					m_wndList.SelectItem(i);
				}
			}
			pData ++;
		}
		m_wndList.ShowWindow( SW_SHOW );
		if ( bTip )
		{
			int iRet = MessageBox( _T("�����µ���Ϣ��������߹���ѡ��\"��Ϣ��ѯ\"->\"ͨ����Ϣ\"�鿴��\r\n\r\n�����Ƿ������鿴��") ,_T("��ʾ"),MB_ICONQUESTION|MB_YESNO);
			if ( iRet == IDYES )
			{

				On_Msg_See();
				//this->m_pMainFrame->m_pBaseView->ShowFuncDlg(DLGFUNC_MSG);
			}
		}
		return true;
	}
	return false;
}

void CFMsg::OnDblclkMsgList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;

	On_Msg_See();
}

void CFMsg::OnRclickMsgList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;

	ShowRMenu();
}

void CFMsg::ShowRMenu()
{
	CMenu menu;
	menu.CreatePopupMenu();
	long lItem = this->GetCurrentSelected();

	//�޸�
	if ( lItem >=0)
	{
		menu.AppendMenu(MF_STRING     , MENU_MSG_SEE, _T(" �� �� ") );
	}
	else
	{
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_MSG_SEE, _T(" �� �� ") );
	}
	//menu.AppendMenu(MF_SEPARATOR );
	//ˢ��
	menu.AppendMenu(MF_STRING     , MENU_MSG_REFRESH, _T(" ˢ �� ") );

	//��ʾ�˵�
	POINT pt ;
	::GetCursorPos( &pt );
	//this->ClientToScreen( &pt);
	menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
	menu.DestroyMenu();
}

long CFMsg::GetCurrentSelected()
{
	POSITION pos = m_wndList.GetFirstSelectedItemPosition();
	if ( pos )
	{
		return m_wndList.GetNextSelectedItem(pos);
	}
	return -1;
}
void CFMsg::On_Msg_See()
{
	long lItem = GetCurrentSelected();
	if ( lItem <0 )
		return ;

	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	POSITION pos2 = pos;
	ANS_Msg_SeeData * pData = m_Msg.GetNext( pos );
	if (pData)
	{

		if ( pData->lBBSID > m_pMainFrame->m_Setup.lLastBBSID)
		{
			m_pMainFrame->m_Setup.lLastBBSID = pData->lBBSID;  //�������һ�ε�ID
			m_pMainFrame->SaveSetup();
		}

		DLG_Msg_See dlg(this);
		
		dlg.m_strSender= m_wndList.GetItemText(lItem,1);
		//	dlg.m_strRecver= m_wndList.GetItemText(lItem,2);
		dlg.m_strSendTime  = m_wndList.GetItemText(lItem,2);
		dlg.m_strType  = m_wndList.GetItemText(lItem,3);
		dlg.m_strMsg   = pData->szBZ;
		
		dlg.DoModal();
	}

}

void CFMsg::On_Msg_Refresh()
{
	RefreshInfo();
}

void CFMsg::OnOK() 
{
	//CDialog::OnOK();
}

void CFMsg::OnCancel() 
{
	//CDialog::OnCancel();
}

void CFMsg::Close_Msg()
{
	//������������
	while (!m_Msg.IsEmpty())
	{
		ANS_Msg_SeeData * pMsg = m_Msg.GetHead();
		m_Msg.RemoveHead();
		delete pMsg;
	}
}


void CFMsg::OnDestroy() 
{
	Close_Msg();
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	
}