////////////////////////////////////////////////////
//        //
// .                                      //
// ---------------------------------------------- //
//                          //
////////////////////////////////////////////////////

#include "stdafx.h"
#include "SampleLP.h"
#include "SampleLPDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CSampleLPDlg dialog

CSampleLPDlg::CSampleLPDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSampleLPDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSampleLPDlg)
	//}}AFX_DATA_INIT
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_LP = NULL;
}

void CSampleLPDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSampleLPDlg)
	DDX_Control(pDX, IDC_LAST_RECORD, m_LastRecord);
	DDX_Control(pDX, IDC_FIRST_RECORD, m_FirstRecord);
	DDX_Control(pDX, IDC_LIST, m_List);
	DDX_Control(pDX, IDC_ENABLE, m_Enable);
	DDX_Control(pDX, IDC_CACHE, m_Cache);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CSampleLPDlg, CDialog)
	//{{AFX_MSG_MAP(CSampleLPDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_EXIT, OnExit)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_PAGEPROPERIES, OnPageproperies)
	ON_BN_CLICKED(IDC_ENABLE, OnEnable)
	ON_BN_CLICKED(IDC_CACHE, OnCache)
	ON_BN_CLICKED(IDC_READDATA, OnReaddata)
	ON_BN_CLICKED(IDC_WRITEDATA, OnWritedata)
	ON_CBN_SELCHANGE(IDC_FIRST_RECORD, OnChangeFirstRecord)
	ON_CBN_SELCHANGE(IDC_LAST_RECORD, OnChangeLastRecord)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSampleLPDlg message handlers

BOOL CSampleLPDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	SetIcon(m_hIcon, TRUE);	
	SetIcon(m_hIcon, FALSE);

	//  COM
	CoInitialize (NULL);

	HRESULT hRes = m_LP.CreateInstance("AddIn.LP45");
	if (hRes != S_OK)
	{
		MessageBox(" LP45  ");
		return FALSE;
	}

	//  
	m_List.InsertColumn (0, "PLU", LVCFMT_LEFT, 40);
	m_List.InsertColumn (1, "", LVCFMT_LEFT, 60);
	m_List.InsertColumn (2, " ", LVCFMT_LEFT, 70);
	m_List.InsertColumn (3, "", LVCFMT_LEFT, 80);
	m_List.InsertColumn (4, " 2", LVCFMT_LEFT, 80);
	m_List.InsertColumn (5, " ", LVCFMT_LEFT, 100);
	m_List.InsertColumn (6, " ", LVCFMT_LEFT, 100);
	m_List.InsertColumn (7, " ", LVCFMT_LEFT, 80);
	m_List.InsertColumn (8, " ", LVCFMT_LEFT, 80);
	m_List.InsertColumn (9, " ", LVCFMT_LEFT, 80);

	//     
	char str[20];
	for (int i=1; i<=1000; i++)
	{
		wsprintf (str, "%d", i);
		m_FirstRecord.InsertString (i-1, str);
		m_LastRecord.InsertString (i-1, str);
	}
	
	//  
	UpdateForm();
	
	return TRUE;  
}

/////////////////////////////////////////////////////////
//  
void CSampleLPDlg::UpdateForm ()
{
	m_Enable.SetCheck ( m_LP->DeviceEnabled );
	m_Cache.SetCheck ( m_LP->CacheReport);
	m_FirstRecord.SetCurSel ( m_LP->FirstRecord - 1 );
	m_LastRecord.SetCurSel ( m_LP->LastRecord - 1 );
}


void CSampleLPDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); 

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		//  
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		//  
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}


HCURSOR CSampleLPDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

//  
void CSampleLPDlg::OnExit() 
{
	//  LP45
	if (m_LP)
	{
		m_LP.Release();
		m_LP = NULL;
	}
	CoUninitialize();
	CDialog::OnOK();	
}

//  
void CSampleLPDlg::OnClose() 
{
	//  LP45
	if (m_LP)
	{
		m_LP.Release();
		m_LP = NULL;
	}
	CoUninitialize();
	CDialog::OnClose();
}

void CSampleLPDlg::OnPageproperies() 
{
	//   
	m_LP->ShowProperties();
	UpdateForm();
}

/////////////////////////////////////////////////////////
void CSampleLPDlg::OnEnable() 
{
	try
	{
		// / 
		m_LP->DeviceEnabled = m_Enable.GetCheck();
	}
	catch (const _com_error)
	{
		//  
		MessageBox ( m_LP->ResultDescription, "...");
	}
	UpdateForm();
}

/////////////////////////////////////////////////////////
void CSampleLPDlg::OnCache() 
{
	try
	{
		// / 
		m_LP->CacheReport = m_Cache.GetCheck();
	}
	catch (const _com_error)
	{
		//  
		MessageBox ( m_LP->ResultDescription, "...");
	}
	UpdateForm();
}

/////////////////////////////////////////////////////////
//  
void CSampleLPDlg::OnReaddata() 
{
	int				i, RowIndex;
	int				AStart = m_LP->FirstRecord,
					AEnd = m_LP->LastRecord;
	char			str [30];
	
	//  ,  
	m_List.DeleteAllItems();

	try
	{
		//   
		m_LP->BeginReport();

		RowIndex = 0;
		//      
		for (i = AStart; i <= AEnd; i++)
		{
			m_LP->GetRecord();
			
			//   ...
			wsprintf (str, "%d", m_LP->PLU);
			m_List.InsertItem (RowIndex, str);
			// ...  

			wsprintf (str, "%s", ((COleCurrency*) &m_LP->Price)->Format ());
			m_List.SetItemText (RowIndex, 1, str);
			
			wsprintf (str, "%d", m_LP->ICode);
			m_List.SetItemText (RowIndex, 2, str);
			m_List.SetItemText (RowIndex, 3, m_LP->Name);
			m_List.SetItemText (RowIndex, 4, m_LP->Name2);
			wsprintf (str, "%d", m_LP->MsgNo);
			m_List.SetItemText (RowIndex, 5, str);
			wsprintf (str, "%d", m_LP->Life);
			m_List.SetItemText (RowIndex, 6, str);
			_gcvt (m_LP->Tare, 12, str);
			m_List.SetItemText (RowIndex, 7, str);
			wsprintf (str, "%d", m_LP->GCode);
			m_List.SetItemText (RowIndex, 8, str);
			wsprintf (str, "%d", m_LP->WareType);
			m_List.SetItemText (RowIndex, 9, str);
			RowIndex ++;
		}

		//   
		m_LP->EndReport();
	}
	catch (const _com_error)
	{
		//  
		if (m_LP->ResultCode == -2001) // -2001 =   
		{
			//   
			m_LP->EndReport();
		}
		else
			MessageBox ( m_LP->ResultDescription, "...");
	}
	UpdateForm();
}

//   
void CSampleLPDlg::OnWritedata() 
{
	int				i;
	COleCurrency	cur;
	try
	{
		//    
		m_LP->FirstRecord = 1;
		m_LP->LastRecord = 10;

		//   
		m_LP->BeginAdd();

		//  10  (  1  10)
		for (i=1; i<=10; i++)
		{
			m_LP->PLU = i;
			cur.SetCurrency (100*i,0);
			m_LP->Price = cur;
			m_LP->ICode = i*77777;
			m_LP->Name = " ";
			m_LP->Name2 = "  2";
			m_LP->MsgNo = i;
			m_LP->Life = i*30;
			m_LP->Tare = (double) i*0.85;
			m_LP->GCode = i*9;
			m_LP->WareType = (i % 2);
			m_LP->SetRecord();
		}
		m_LP->EndAdd();
	}
	catch (const _com_error)
	{
		//  
		MessageBox (m_LP->ResultDescription, "...");
	}
	
	UpdateForm();
}

void CSampleLPDlg::OnChangeFirstRecord() 
{
	//     
	try
	{
		m_LP->FirstRecord = m_FirstRecord.GetCurSel() + 1;
	}
	catch (_com_error)
	{
		//  
		MessageBox (m_LP->ResultDescription, "...");
	}

	UpdateForm();
}

void CSampleLPDlg::OnChangeLastRecord() 
{
	//     
	try
	{
		m_LP->LastRecord = m_LastRecord.GetCurSel() + 1;
	}
	catch (_com_error)
	{
		//  
		MessageBox (m_LP->ResultDescription, "...");
	}

	UpdateForm();
	
}
