// DLG_UserSelect.cpp : implementation file
//

#include "stdafx.h"
#include "corpsms.h"
#include "DLG_UserSelect.h"

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

/////////////////////////////////////////////////////////////////////////////
// DLG_UserSelect dialog

#include "MainFrm.h"

DLG_UserSelect::DLG_UserSelect(CWnd* pParent /*=NULL*/)
	: CDialog(DLG_UserSelect::IDD, pParent)
	, m_strName(_T(""))
{
	//{{AFX_DATA_INIT(DLG_UserSelect)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_lUserID = -1;
	m_strRoot = _T("ËùÓÐÈËÔ±");
	m_bGroup  = false;

	m_strDB = _T("Users");
	m_bShowUser = true;

	m_lShowType = 0;
	m_bFirstFind = true;
	m_hSearched = NULL;
}


void DLG_UserSelect::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(DLG_UserSelect)
	DDX_Control(pDX, IDC_USERSELECT_TREE, m_wndTree);
	//}}AFX_DATA_MAP
	DDX_Control(pDX, IDC_USERSELECT_NAME, m_wndName);
	DDX_Text(pDX, IDC_USERSELECT_NAME, m_strName);
	DDV_MaxChars(pDX, m_strName, 32);
}


BEGIN_MESSAGE_MAP(DLG_UserSelect, CDialog)
	//{{AFX_MSG_MAP(DLG_UserSelect)
	ON_NOTIFY(NM_DBLCLK, IDC_USERSELECT_TREE, OnDblclkUserselectTree)
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_USERSELECT_NAME_S, &DLG_UserSelect::OnBnClickedUserselectNameS)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// DLG_UserSelect message handlers

void DLG_UserSelect::SetParam(CMainFrame *pFrame,CString strDB , CString strRoot,BOOL bShowUser)
{
	m_pMainFrame = pFrame;
	m_AdoRS.SetAdoConnection( &pFrame->m_adoConnection );
	m_strDB = strDB;
	m_bShowUser = bShowUser;
	m_strRoot   = strRoot;
}

long DLG_UserSelect::GetParam(CString & strUser)
{
	strUser = m_strUser;
	return m_lUserID;
}

BOOL DLG_UserSelect::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	//´´½¨Í¼ÏñÁбí
	m_Image.Create( 20 , 20 , ILC_COLOR32|ILC_MASK , 5 ,  1);
	CBitmap bmp;
	bmp.LoadBitmap( IDB_F_FOLDER ); 
	m_Image.Add( &bmp , RGB(255,255,255) );              //Îļþ¼Ð
	bmp.DeleteObject();	bmp.LoadBitmap( IDB_F_FOLDER_O  );
	m_Image.Add( &bmp , RGB(255,255,255) );              //Îļþ¼Ð-´ò¿ª
	bmp.DeleteObject();	bmp.LoadBitmap( IDB_F_GADDRESS );
	m_Image.Add( &bmp , RGB(255,255,255) );              //¹«ÓõØÖ·±¾
	bmp.DeleteObject();	bmp.LoadBitmap( IDB_L_USER_NOR );
	m_Image.Add( &bmp , RGB(193,193,193) );              //Óû§

	m_strUser = m_strRoot;

	m_wndTree.SetBkColor( RGB(180,213,170) );
	m_wndTree.SetImageList(&m_Image, TVSIL_NORMAL );
	m_MainItem  = m_wndTree.InsertItem( m_strRoot , 2 , 2 );
	m_wndTree.SetItemData( m_MainItem , -1 );
	ShowGGroup( m_MainItem , _T("") );
	m_wndTree.Expand(m_MainItem,TVE_EXPAND);
	m_wndTree.SelectItem( m_MainItem );
	

	if ( m_lShowType==1 )
	{
		this->SetWindowText(_T("ÇëÑ¡ÔñÐèÒª²éѯµÄÓû§"));
	}
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL DLG_UserSelect::ShowGGroup(HTREEITEM hMainItem, TCHAR *pGroupID)
{
	CAdoRecordSet AdoRS;
	CAdoRecordSet AdoRS2;
	AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection );
	AdoRS2.SetAdoConnection(&m_pMainFrame->m_adoConnection);
	TCHAR szSelect[128]={0};
	_stprintf( szSelect , _T("select * from %s where GroupID like '%s_' AND UserType='0' order by CreateTime") , m_strDB , pGroupID );
	BOOL b = AdoRS.Open( szSelect );
	long lCount = AdoRS.GetRecordCount();
	if ( b && lCount )
	{
		AdoRS.MoveFirst();
		while( !AdoRS.IsEOF() )
		{
			TCHAR szGroupID[16]={0};
			TCHAR szName[16]={0};
			long lUserID=0;
			AdoRS.GetCollect( _T("GroupID") , szGroupID );
			AdoRS.GetCollect( _T("Name") , szName );
			AdoRS.GetCollect( _T("UserID") , lUserID );
			HTREEITEM hItem = m_wndTree.InsertItem( szName , 0,1 , hMainItem );
			m_wndTree.SetItemData( hItem , lUserID );

			/*
			if (m_bShowUser)
			{
				//ÏÔʾÍê×éÖ®ºó£¬ÏÔʾÓû§
				if (_tcslen(szGroupID) <= 0)
				{
					_stprintf(szSelect, _T("select * from %s where GroupID = '' OR GroupID is NULL AND UserType='1' order by CreateTime "), m_strDB);
				}
				else
				{
					_stprintf(szSelect, _T("select * from %s where GroupID = '%s' AND UserType='1' order by CreateTime"), m_strDB, szGroupID);
				}
				b = AdoRS2.Open(szSelect);
				lCount = AdoRS2.GetRecordCount();
				if (b && lCount)
				{
					AdoRS2.MoveFirst();
					while (!AdoRS2.IsEOF())
					{
						CString strShow;
						CString strName;
						CString strLoginName;
						long lUserID = 0;
						AdoRS2.GetCollect(_T("Name"), strName);
						AdoRS2.GetCollect(_T("LoginName"), strLoginName);
						AdoRS2.GetCollect(_T("UserID"), lUserID);

						strShow.Format(_T("%s [%s]"), strName, strLoginName);

						//if ( m_lShowType==1 ) //ÏÔʾÐÕÃû+ÊÖ»úºÅ
						//{
						//	CString strMobile;
						//	AdoRS.GetCollect( _T("Mobile") , strMobile );
						//
						//	CString strTemp;
						//	strTemp.Format( _T("%s[%s]") , szName , strMobile );
						//	_tcscpy(szName , strTemp);
						//}

						HTREEITEM hItem2 = m_wndTree.InsertItem(strShow, 3, 3, hItem);
						m_wndTree.SetItemData(hItem2, lUserID);
						AdoRS2.MoveNext();
					}
				}
			}
			*/

			ShowGGroup( hItem , szGroupID );
			AdoRS.MoveNext();
		}
	}

	if ( m_bShowUser )
	{
		//ÏÔʾÍê×éÖ®ºó£¬ÏÔʾÓû§
		if ( _tcslen(pGroupID)<=0 )
		{
			_stprintf( szSelect , _T("select * from %s where GroupID = '' OR GroupID is NULL AND UserType='1' order by CreateTime "),m_strDB );
		}
		else
		{
			_stprintf( szSelect , _T("select * from %s where GroupID = '%s' AND UserType='1' order by CreateTime") ,m_strDB, pGroupID );
		}
		b = AdoRS.Open( szSelect );
		lCount = AdoRS.GetRecordCount();
		if ( b && lCount )
		{
			AdoRS.MoveFirst();
			while( !AdoRS.IsEOF() )
			{
				CString strShow;
				CString strName;
				CString strLoginName;
				long lUserID=0;
				AdoRS.GetCollect( _T("Name") , strName);
				AdoRS.GetCollect(_T("LoginName"), strLoginName);
				AdoRS.GetCollect( _T("UserID") , lUserID );

				strShow.Format(_T("%s [%s]"), strName, strLoginName);

				//if ( m_lShowType==1 ) //ÏÔʾÐÕÃû+ÊÖ»úºÅ
				//{
				//	CString strMobile;
				//	AdoRS.GetCollect( _T("Mobile") , strMobile );
				//
				//	CString strTemp;
				//	strTemp.Format( _T("%s[%s]") , szName , strMobile );
				//	_tcscpy(szName , strTemp);
				//}

				HTREEITEM hItem = m_wndTree.InsertItem(strShow, 3,3 , hMainItem );
				m_wndTree.SetItemData( hItem , lUserID );
				AdoRS.MoveNext();
			}
		}
	}
	return true;
}

void DLG_UserSelect::OnOK() 
{
	HTREEITEM hItem = m_wndTree.GetSelectedItem();
	if ( !hItem )
	{
		MessageBox( _T("Äã±ØÐë´Ó×ó±ßµÄÊ÷×´ÁбíÖÐÑ¡ÔñÒ»¸ö²éѯ¶ÔÏó!"),_T("´íÎó"),MB_ICONWARNING);
		return ;
	}
	m_strUser = m_wndTree.GetItemText(hItem);
	m_lUserID = m_wndTree.GetItemData(hItem);
	int iImage=0;
	int iSImage=0;
	m_wndTree.GetItemImage(hItem,iImage,iSImage);
	if ( iImage==0 || iImage== 2 )
		m_bGroup = true;
	else
		m_bGroup = false;

	//Éú³ÉÊ÷×´²éѯÓû§Ãû
	CString strTemp;
	HTREEITEM  hParItem = m_wndTree.GetParentItem(hItem);
	while (hParItem != NULL && hParItem != m_MainItem)
	{
		strTemp = m_wndTree.GetItemText(hParItem);
		m_strUser = strTemp+"\\"+m_strUser;
		hParItem = m_wndTree.GetParentItem(hParItem);
	}

	
	if ( m_lShowType==1 ) //ÏÔʾÐÕÃû+ÊÖ»úºÅ
	{
		if ( m_bGroup && m_lUserID!=-1  )  //Ö»ÄÜÑ¡ÔñÓû§£¬²»ÄÜÑ¡ÔñÓû§×é
		{
			MessageBox( _T("Äã±ØÐë´Ó×ó±ßµÄÊ÷×´ÁбíÖÐÑ¡ÔñÒ»¸öÓû§!"),_T("´íÎó"),MB_ICONWARNING);
			return ;
		}
		/*
		//·Ö½âÐÕÃûÓëºÅÂë
		CString strTemp= m_wndTree.GetItemText(hItem);;
		long lBegin=0;
		long lEnd=0;
		lBegin=strTemp.Find(_T("["));
		lEnd=strTemp.Find(_T("]"));

		if ( lBegin>=0 )
			m_strUser = strTemp.Left(lBegin);

		if ( lEnd>lBegin )
		{
			m_strMobile =strTemp.Mid(lBegin+1,lEnd-lBegin-1);
		}

		if ( !::isMobileNum(m_strMobile , m_strMobile.GetLength()) )
		{
			MessageBox( _T("ËùÑ¡ÔñÒµÎñÔ±µÄÊÖ»úºÅÂë²»ÕýÈ·£¬ÇëÐÞÕý»òÖØÑ¡!"),_T("´íÎó"),MB_ICONWARNING);
			return ;
		}
		*/
	}
	CDialog::OnOK();
}

void DLG_UserSelect::OnDblclkUserselectTree(NMHDR* pNMHDR, LRESULT* pResult) 
{

	*pResult = 0;

	OnOK();
}

void DLG_UserSelect::SetShowType(long lShowType)
{
	m_lShowType =lShowType;  //0-Ö»ÏÔʾÐÕÃû£¬1-ÏÔʾÐÕÃû+ÊÖ»úºÅÂë

}


BOOL DLG_UserSelect::PreTranslateMessage(MSG* pMsg)
{
	//´Ë¾ÙÊÇΪÁËÓû§ÔÚÊäÈëºÅÂëʱ°´Á˻سµÈ»ºóתµ½ÊäÈëÄÚÈÝ
	//¶¨Î»¿Í»§
	if (pMsg->message == WM_KEYDOWN)
	{
		if (pMsg->wParam == VK_RETURN && pMsg->hwnd == m_wndName)
		{
			SearchItem();
			return true;
		}
		else
		{
			m_bFirstFind = true;  //Ö»ÒªÊäÈëÁ˷ǻسµ£¬¶¼Êǵ±ÖØÐÂËÑË÷
		}
	}

	return CDialog::PreTranslateMessage(pMsg);
}

BOOL DLG_UserSelect::SearchItem(void)
{
	CString strName;
	m_wndName.GetWindowText(strName);
	if (strName.GetLength() <= 0)
	{
		MessageBox(_T("ÇëÊäÈëÐèÒª²éѯµÄ¹Ø¼ü×Ö£¡"),_T("´íÎó"), MB_ICONWARNING);
		m_wndName.SetFocus();
		return false;
	}
	HTREEITEM hItem = m_wndTree.GetSelectedItem();
	if (hItem == NULL)  //Èç¹ûµ±Ç°Ñ¡ÔñΪ¿Õ£¬Ï൱ÓÚÖØÐ¿ªÊ¼ËÑË÷
	{
		m_bFirstFind = true;
		m_hSearched = NULL;
	}

	HTREEITEM hItem2;
	if (m_bFirstFind)  //ÖØÐÂËÑË÷
	{
		m_ASearch.RemoveAll();
		hItem2 = FindItemName(m_MainItem, strName,NULL);
		m_bFirstFind = false;  //²»ÊÇÖØÐÂËÑË÷ÁË¡£
	}
	else
	{
		hItem2 = FindItemName(m_MainItem, strName, m_hSearched);
	}
	if (hItem2)
	{
		m_hSearched = hItem2;
		m_wndTree.SelectItem(hItem2);
		return true;
	}
	else
	{
		CString str;
		str.Format(_T("ËÑË÷¹Ø¼ü×Ö:%s£¬Òѵ½Ä©Î²¡£"), strName);
		MessageBox(str,_T("ÐÅÏ¢") , MB_ICONINFORMATION);
		m_bFirstFind = true;  //ÖØÐ¿ªÊ¼ËÑË÷
		m_ASearch.RemoveAll();
	}

	return false;
}

HTREEITEM DLG_UserSelect::FindItemName(HTREEITEM hNodeItem, CString strName, HTREEITEM hSearched)
{
	CString strItemName = m_wndTree.GetItemText(hNodeItem);
	if (strItemName.MakeUpper().Find(strName.MakeUpper()) >= 0)
	{
		long lUserID = m_wndTree.GetItemData(hNodeItem);
		long lLength = m_ASearch.GetCount();
		for (int i = 0; i < lLength; i++)
		{
			if (lUserID == m_ASearch.GetAt(i))
				break;
		}
		if (i >= lLength)  //ûÓÐÕÒ¹ýµÄ£¬·µ»Ø
		{
			m_ASearch.Add(lUserID);
			return hNodeItem;
		}
	}

	//ÏÈËÑ×Ó½Úµã
	HTREEITEM hCurItem = m_wndTree.GetChildItem(hNodeItem);//µÃµ½µ±Ç°½ÚµãµÄµÚÒ»¸ö×Ó½ÚµãµÄ¾ä±ú 

	HTREEITEM hNextItem=NULL;

	while (hCurItem != NULL)
	{
		hNextItem = hCurItem;
		HTREEITEM hItem2 = FindItemName(hNextItem, strName, hSearched);
		if (hItem2 != NULL)
		{
			return hItem2;
		}
		hCurItem = m_wndTree.GetNextSiblingItem(hCurItem);//µÃµ½µ±Ç°½ÚµãµÄÐֵܽڵãµÄ¾ä±ú 
	}

	return NULL;
}

void DLG_UserSelect::OnBnClickedUserselectNameS()
{
	SearchItem();
}