// ModeDlg.cpp : implementation file
//

#include "stdafx.h"
#include "ipos.h"
#include "ModeDlg.h"
//#include "ComboGridCtrl.h"
#include "./public/GData.h"
#include "./public/DitClientInfo.h"

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

/////////////////////////////////////////////////////////////////////////////
// CModeDlg dialog


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

	strTitle  = "�ͻ���Ȩģʽ";
	pTitleBmp = NULL;
}


void CModeDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CModeDlg)
	DDX_Control(pDX, IDC_DEFAULTSETTING_BTN, m_DefaultsettingBtn);
	DDX_Control(pDX, IDCANCEL, m_CancelBtn);
	DDX_Control(pDX, IDOK, m_OkBtn);
	//}}AFX_DATA_MAP
	DDX_GridControl(pDX, IDC_CUSTOM_GRIDCTRL, m_GridCtrl);
}


BEGIN_MESSAGE_MAP(CModeDlg, CDialog)
	//{{AFX_MSG_MAP(CModeDlg)
	ON_WM_ERASEBKGND()
	ON_WM_CTLCOLOR()
	ON_BN_CLICKED(IDC_DEFAULTSETTING_BTN, OnDefaultsettingBtn)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CModeDlg message handlers

BOOL CModeDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	//*
	CFont* ptf = m_GridCtrl.GetFont(); // �õ�ԭ��������
	LOGFONT lf; 
	ptf->GetLogFont(&lf); 
	lf.lfHeight = 25; // �ı�����߶� 
	//strcpy (lf.lfFaceName, "����"); // �ı���������
	strcpy (lf.lfFaceName, "Arial"); // �ı��������� 
	lf.lfCharSet = DEFAULT_CHARSET;	//DEFAULT_CHARSET  ANSI_CHARSET  GB2312_CHARSET
	//strcpy (lf.lfFaceName, "Arial Black"); // �ı��������� 
	//strcpy (lf.lfFaceName, "Arial"); // �ı��������� 
	lf.lfWeight = 700;
	m_Font.CreateFontIndirect(&lf); 
	m_GridCtrl.SetFont(&m_Font);	// ����������
	m_GridCtrl.nParentType = 1;

	ShowTitle();

	m_DefaultsettingBtn.LoadBitmaps(_T("defaultsetting_up"), _T("defaultsetting_down"), _T("defaultsetting_up"), _T("defaultsetting_gray") );
	m_OkBtn.LoadBitmaps(_T("OK_up"), _T("OK_down"), _T("ok_up"), _T("OK_gray") );
	m_CancelBtn.LoadBitmaps(_T("cancel_up"), _T("cancel_down"), _T("cancel_up"), _T("cancel_gray") );

	//����
	int i, j;
	for( i=0; i<pModeInfoes.GetSize(); i++ )
	{
		MODE_INFO *pMI_1 = pModeInfoes[i];
		for( j=i+1; j<pModeInfoes.GetSize(); j++ )
		{
			MODE_INFO *pMI_2 = pModeInfoes[j];
			if( pMI_1->nNozzleNum > pMI_2->nNozzleNum )
			{
				pModeInfoes.RemoveAt( j );
				pModeInfoes.RemoveAt( i );
				pModeInfoes.InsertAt( i, pMI_2 );
				pModeInfoes.InsertAt( j, pMI_1 );
				pMI_1 = pMI_2;
			}
		}
	}

	IniGridCtrlInfo( );
	SetGridCtrlColumnInfo( );
	InsertAllItem( );

	m_GridCtrl.SetComboBoxStyle( CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP );


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

void CModeDlg::IniGridCtrlInfo( )
{
	while( m_GridCtrl.GetRowCount() > 1 )
		m_GridCtrl.DeleteRow( 1 );
	while( m_GridCtrl.GetColumnCount() > 0 )
		m_GridCtrl.DeleteColumn( 0 );

	m_GridCtrl.SetFixedRowCount(1);
	m_GridCtrl.SetFixedColumnCount(2);
	m_GridCtrl.SetRowResize(false);
	m_GridCtrl.SetColumnResize(false);

	////////////////////////////////////////////////////
	////////////////////////////////////////////////////
	m_GridCtrl.SetColumnCount( 4 );

	for(int j=0;j<m_GridCtrl.m_comStrArray.GetSize();j++)
		delete m_GridCtrl.m_comStrArray.GetAt(j).comStr;
	m_GridCtrl.m_comStrArray.RemoveAll();

	CStringArray col2;
	col2.Add( "�ÿ�����" );
	col2.Add( "��̨�Զ���Ȩ" );
	col2.Add( "��̨�ֶ���Ȩ" );
	col2.Add( "��̨�ֽ�Ԥ��" );
//	col2.Add( "�ѻ�" );
	m_GridCtrl.AddComboColumn( 2, col2 );

	CStringArray col3;
	col3.Add( "POS����" );
	col3.Add( "��������" );
	m_GridCtrl.AddComboColumn( 3, col3 );

	for (int col = 0; col < m_GridCtrl.GetColumnCount(); col++)
	{ 
		GV_ITEM Item;
		Item.mask = GVIF_TEXT|GVIF_FORMAT;
		Item.row = 0;
		Item.col = col;
		Item.nFormat = DT_LEFT|DT_WORDBREAK;

		if( col == 0 )
			Item.szText.Format(_T("ǹ��") );
		else if( col == 1 )
			Item.szText.Format(_T("��ǰģʽ") );
		else if( col == 2 )
			Item.szText.Format(_T("��ѡ��ģʽ") );
		else if( col == 3 )
			Item.szText.Format(_T("������ʽ") );

		m_GridCtrl.SetItem(&Item);
	}
}

void CModeDlg::SetGridCtrlColumnInfo( )
{
	CRect rect;
	CWnd* pWnd = GetDlgItem( IDC_CUSTOM_GRIDCTRL );
	pWnd->GetWindowRect(&rect);
	ScreenToClient(rect);

	if( m_GridCtrl.GetColumnCount() >= 1 )
	{
		m_GridCtrl.SetColumnWidth( 0, 140 );
		m_GridCtrl.SetColumnWidth( 1, 260 );
		m_GridCtrl.SetColumnWidth( 2, 280 );
		m_GridCtrl.SetColumnWidth( 3, 280 );
	}
}

void CModeDlg::InsertAllItem( )
{
	IniGridCtrlInfo( );
	SetGridCtrlColumnInfo( );

	int i;
	CString strItem;

	for( i=0; i<pModeInfoes.GetSize(); i++ )
	{
		MODE_INFO* pMI = pModeInfoes[ i ];

		strItem.Format( "%d", pMI->nNozzleNum );
		m_GridCtrl.InsertRow( strItem, m_GridCtrl.GetRowCount() );
		InsertItem( m_GridCtrl.GetRowCount()-1, pMI );
	}
}

void CModeDlg::InsertItem( int nIndex, MODE_INFO* pItem )
{
	CString strItem;

	strItem.Format( "%d", pItem->nNozzleNum );
	m_GridCtrl.SetItemText( nIndex, 0, strItem );

	if( pItem->nCurMode == WOKRMODE_CARD_SELFHELP )
		strItem = "�ÿ�����";
	else if( pItem->nCurMode == WOKRMODE_HOST_AUTO )
		strItem = "��̨�Զ���Ȩ";
	else if( pItem->nCurMode == WOKRMODE_HOST_MANUAL )
		strItem = "��̨�ֶ���Ȩ";
	else if( pItem->nCurMode == WOKRMODE_HOST_ACTIVE )
		strItem = "��̨�ֽ�Ԥ��";
//	else if( pItem->nCurMode == WOKRMODE_OFFLINE )
//		strItem = "�ѻ�";
	else
		strItem = "�ÿ�����";
	m_GridCtrl.SetItemText( nIndex, 1, strItem );
	m_GridCtrl.SetItemText( nIndex, 2, strItem );

	if( pItem->nCheckoutMode == CHECKOUT_POS )
		strItem = "POS����";
	else if( pItem->nCheckoutMode == CHECKOUT_MANUAL )
		strItem = "��������";
	else
		strItem = "POS����";
	m_GridCtrl.SetItemText( nIndex, 3, strItem );
}


HBRUSH CModeDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	
	// TODO: Return a different brush if the default is not desired
	return hbr;
}

void CModeDlg::OnOK() 
{
	if( pTitleBmp)
	{
		pTitleBmp->DeleteObject();
		delete pTitleBmp;
		pTitleBmp = NULL;
	}
	
	m_Font.DeleteObject();

	CDialog::OnOK();
}

void CModeDlg::OnCancel() 
{
	if( pTitleBmp)
	{
		pTitleBmp->DeleteObject();
		delete pTitleBmp;
		pTitleBmp = NULL;
	}
	
	m_Font.DeleteObject();

	CDialog::OnCancel();
}

BOOL CModeDlg::OnEraseBkgnd(CDC* pDC)
{
	CBitmap bmp;
	bmp.LoadBitmap( "FillingBK" );

	BITMAP bm;
	bmp.GetBitmap(&bm);

	CDC dcMemory;
	dcMemory.CreateCompatibleDC(pDC);
	CBitmap *ptrBmpOld=dcMemory.SelectObject(&bmp);
	pDC->BitBlt( 0, 0, bm.bmWidth, bm.bmHeight, &dcMemory, 0, 0, SRCCOPY );
	dcMemory.SelectObject(ptrBmpOld);
	dcMemory.DeleteDC();

	bmp.DeleteObject();

	return true;
}

void CModeDlg::ShowTitle()
{
	CDC* pDC = GetDC();

	if( pTitleBmp)
	{
		pTitleBmp->DeleteObject();
		delete pTitleBmp;
		pTitleBmp = NULL;
	}	



	CDC dcTmpMem;
	if( dcTmpMem.CreateCompatibleDC(pDC) )
	{	
		CBitmap BkBmp;
		BkBmp.LoadBitmap( IDB_TITLE );
		CBitmap* pTmpOldBitmap = dcTmpMem.SelectObject( &BkBmp );
		BITMAP BkBitMap;
		BkBmp.GetBitmap( &BkBitMap );

		pTitleBmp = new CBitmap;
		pTitleBmp->CreateCompatibleBitmap(pDC,BkBitMap.bmWidth, BkBitMap.bmHeight);
		ASSERT(pTitleBmp->m_hObject != NULL);

		CDC dcMem;
		dcMem.CreateCompatibleDC(pDC);
		CBitmap* pOldBitmap = dcMem.SelectObject(pTitleBmp);

		dcMem.BitBlt( 0, 0, BkBitMap.bmWidth, BkBitMap.bmHeight, &dcTmpMem, 0, 0, SRCCOPY);

		dcMem.SetBkMode( TRANSPARENT );
		dcMem.SetTextColor( RGB(255,255,255) );

		CFont ItemFold;
		CFont *pOldFont = NULL;
		if( 0 != ItemFold.CreateFont( 30, 0,0,0, FW_BOLD ,0,0,0,DEFAULT_CHARSET,
			OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY,
			VARIABLE_PITCH|FF_SWISS, _T("Arial") ) )
		{
			pOldFont = dcMem.SelectObject(&ItemFold);
		}

		dcMem.TextOut( 0, 0, strTitle );

		if( pOldFont != NULL )
			dcMem.SelectObject(pOldFont);
		ItemFold.DeleteObject();

		dcMem.SelectObject(pOldBitmap);
		dcMem.DeleteDC();
		BkBmp.DeleteObject();

		dcTmpMem.SelectObject(pTmpOldBitmap);
		dcTmpMem.DeleteDC();

		HBITMAP handle = ((CStatic*)GetDlgItem(IDC_TITLEBMP))->SetBitmap( pTitleBmp->operator HBITMAP() );
		DeleteObject(handle);
	}

	ReleaseDC( pDC );
}

//ÿ�α༭���ʱ���ô˺����������ݺϷ��Եļ�鲢�����й��������ֵ
void CModeDlg::GridVerifyData( )
{
	GData* pGData = &(singleton<GData>::instance());

	CString strItem;

	CCellID CellID = m_GridCtrl.GetFocusCell(); 

	if( (CellID.row-1)<pModeInfoes.GetSize() && (CellID.row-1)>=0 )
	{
		MODE_INFO* pMI = pModeInfoes[CellID.row-1];

		DIT_CLIENT_INFO *pDit = pGData->m_ditMgr.findDITInfoByPumpNo(pMI->nNozzleNum);

		strItem = m_GridCtrl.GetItemText( CellID.row, CellID.col );
		if( CellID.col == 0 )//ǹ��
		{
		}
		else if( CellID.col == 1 )//��ǰģʽ
		{
		}
		else if( CellID.col == 2 )//��ѡ��ģʽ
		{
			CString strPreItem = "";
			if( pDit != NULL )
			{
				if( pDit->m_ProtocolType==PROTOCOL_HENGSHAN || pDit->m_ProtocolType==PROTOCOL_NEWHENGSHAN 
					|| pDit->m_ProtocolType == PROTOCOL_HENGSHAN_HSC )
				{
					if( strItem == "�ÿ�����" )
					{
						if( pMI->nNewMode == WOKRMODE_HOST_AUTO )
							strPreItem = "��̨�Զ���Ȩ";
						else if( pMI->nNewMode == WOKRMODE_HOST_MANUAL )
							strPreItem = "��̨�ֶ���Ȩ";
						else if( pMI->nNewMode == WOKRMODE_HOST_ACTIVE )
							strPreItem = "��̨�ֽ�Ԥ��";
						else
							strPreItem = "��̨�Զ���Ȩ";
					}
				}
			}

			if( strPreItem != "" )
			{
				m_GridCtrl.SetItemText( CellID.row, CellID.col, strPreItem );
			}
			else
			{
				if( strItem == "�ÿ�����" )
					pMI->nNewMode = WOKRMODE_CARD_SELFHELP;
				else if( strItem == "��̨�Զ���Ȩ" )
					pMI->nNewMode = WOKRMODE_HOST_AUTO;
				else if( strItem == "��̨�ֶ���Ȩ" )
					pMI->nNewMode = WOKRMODE_HOST_MANUAL;
				else if( strItem == "��̨�ֽ�Ԥ��" )
					pMI->nNewMode = WOKRMODE_HOST_ACTIVE;
	//			else if( strItem == "�ѻ�" )
	//				pMI->nNewMode = WOKRMODE_OFFLINE;
				else
					pMI->nNewMode = WOKRMODE_NULL;
			}
		}
		else if( CellID.col == 3 )//������ʽ
		{
			if( strItem == "POS����" )
				pMI->nCheckoutMode = CHECKOUT_POS;
			else if( strItem == "��������" )
				pMI->nCheckoutMode = CHECKOUT_MANUAL;
		}
	}
}


void CModeDlg::OnDefaultsettingBtn() 
{
	GData* pGData = &(singleton<GData>::instance());
	for(int i=0; i<pModeInfoes.GetSize(); i++ )
	{
		MODE_INFO *pItem = pModeInfoes[i];

		PUMP_CONFIG *pPumpCfg = pGData->m_pumpsMgr.findPumpCfgByNozzleNo(pItem->nNozzleNum);

		if( pPumpCfg != NULL )
		{
			CString strItem;

			pItem->nNewMode			= pPumpCfg->nWorkMode;
			pItem->nCheckoutMode	= pPumpCfg->nCheckoutMode;

			if( pItem->nNewMode == WOKRMODE_CARD_SELFHELP )
				strItem = "�ÿ�����";
			else if( pItem->nNewMode == WOKRMODE_HOST_AUTO )
				strItem = "��̨�Զ���Ȩ";
			else if( pItem->nNewMode == WOKRMODE_HOST_MANUAL )
				strItem = "��̨�ֶ���Ȩ";
			else if( pItem->nNewMode == WOKRMODE_HOST_ACTIVE )
				strItem = "��̨�ֽ�Ԥ��";
	//		else if( pItem->nNewMode == WOKRMODE_OFFLINE )
	//			strItem = "�ѻ�";
			else
				strItem = "�ÿ�����";
			m_GridCtrl.SetItemText( i+1, 2, strItem );

			if( pItem->nCheckoutMode == CHECKOUT_POS )
				strItem = "POS����";
			else if( pItem->nCheckoutMode == CHECKOUT_MANUAL )
				strItem = "��������";
			else
				strItem = "POS����";
			m_GridCtrl.SetItemText( i+1, 3, strItem );
		}
	}
	
	m_GridCtrl.Invalidate();
}