// StatusDialog.cpp : implementation file
//

#include "gui\stdafx.h"
#include "client.h"
#include "gui\statusdialog.h"
#include "gui\wmmessage.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CLrsStatusDialog dialog


/////////////////////////////////////////////////////////////////////////////
// Column heading info
#define C_COLUMNS		3
const int colWidths[] = {50, 150, 256 };
const char *colHeading[] = {"Priority", "Time", "Message"};

CLrsStatusDialog::CLrsStatusDialog(CWnd* pParent /*=NULL*/)
	: CDialog(CLrsStatusDialog::IDD, pParent),
	m_pLinkIndicator(0),
	m_pTimeIndicator(0)
{
	//{{AFX_DATA_INIT(CLrsStatusDialog)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT

	_lastLine = 0;
	_connectionstatus =  LrsConnectionStatus::instance();
}
BOOL CLrsStatusDialog::Create(CWnd* pParent)
{
	m_pLinkIndicator = new CLinkIndicator(IDC_MICRO_LINK_STATE, 
							LrsConnectionStatus::instance(), 
							this, IDB_LED_OFF, IDB_LED_ON, IDB_LED_CLR);

	m_pTimeIndicator = new CTimeIndicator(IDC_ELAPSED_CONNECTION_TIME,IDC_ELAPSED_TARGETON_TIME, 
							LrsConnectionStatus::instance(),
							this);
							
	return CDialog::Create(CLrsStatusDialog::IDD, pParent);

}
CLrsStatusDialog::~CLrsStatusDialog()
{
	if(m_pLinkIndicator != 0)
		delete m_pLinkIndicator;

	if(m_pTimeIndicator != 0)
		delete m_pTimeIndicator;
}
void CLrsStatusDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLrsStatusDialog)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BOOL CLrsStatusDialog::OnInitDialog() 
{
	CDialog::OnInitDialog();

	CListCtrl *pListView = (CListCtrl*) GetDlgItem(IDC_ALARMLIST);	
	HICON hIcon[3];
		
	for ( int iCol = 0; iCol < C_COLUMNS; iCol++) {
		pListView->InsertColumn( iCol, colHeading[iCol], LVCFMT_LEFT, colWidths[iCol], iCol);
	}
	
	m_ilSmall.Create( 16, 16, 0, 8, 8 );

	hIcon[0] = AfxGetApp()->LoadIcon(IDI_MSG);	//message
	hIcon[1] = AfxGetApp()->LoadIcon(IDI_WARN); //warning
	hIcon[2] = AfxGetApp()->LoadIcon(IDI_ALARM); //alarm

	for( int i=0; i < 3; i++)
			m_ilSmall.Add(hIcon[i]);			
		
	pListView->SetImageList(&m_ilSmall,LVSIL_SMALL);		

	//ResizeParentToFit(FALSE);
	
	pListView->SetBkColor(RGB(255,255,255)); //white
	//pListView->SetTextBkColor(RGB(0,0,0)); //black
	
	int m_nTimer = SetTimer(1,1000, NULL); //~1 second
	ASSERT(m_nTimer != 0);

	return 0;
}
BEGIN_MESSAGE_MAP(CLrsStatusDialog, CDialog)
	ON_MESSAGE(WM_MESSAGE, UpdateMessage)
	//{{AFX_MSG_MAP(CLrsStatusDialog)
	ON_WM_TIMER()
	ON_WM_SHOWWINDOW()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLrsStatusDialog message handlers
LRESULT CLrsStatusDialog::UpdateMessage(WPARAM wParam, LPARAM lParam)
{
	LRS::Message *msg = (LRS::Message *) lParam;

	if(msg != 0)
		this->UpdateDisplay(msg);

	return 0L;
}
void CLrsStatusDialog::UpdateDisplay(LRS::Message *msg)
{
	LV_ITEM lvi;
	int ndx;
	struct tm *newtime;
	const long long_time = msg->arrival_time;
	const char *text = msg->text;
	char formattime[26];
	memset(formattime, '\0', 26);
		
	CListCtrl *pList = (CListCtrl*) GetDlgItem(IDC_ALARMLIST);
	
	TRACE("Entering CLrsStatusDialog::UpdateDisplay \n ");

	if(msg != NULL)		{

		// Insert image in column 0
		lvi.mask = LVIF_IMAGE;
		lvi.iItem = _lastLine;		
		lvi.iSubItem = 0;	
		lvi.iImage = msg->priority;
		ndx = pList->InsertItem(&lvi);
		
		// Insert timestamp text into column 1		
		if(ndx != -1)
		{
			lvi.mask = LVIF_TEXT;
			newtime = gmtime((const long *) &long_time);
			strcpy(formattime, (char *)asctime(newtime));			
			formattime[24] = '\0' ;
			lvi.pszText = formattime;
			lvi.iItem = _lastLine;
			lvi.iSubItem = 1;
			pList->SetItem(&lvi);
		}

		// Insert message text into column 2
		if(ndx != -1)
		{
			lvi.mask = LVIF_TEXT;
			lvi.pszText = (char *)text;
			lvi.iItem = _lastLine;
			lvi.iSubItem = 2;
			pList->SetItem(&lvi);
		}

		_lastLine++;
	}//end if	
	
	
}

void CLrsStatusDialog::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	m_pLinkIndicator->update();	
	m_pTimeIndicator->update();		
}
