#if !defined(AFX_DLGPOPUPREPORT_H__559AE5A3_86ED_4195_9331_4452B1CF9C95__INCLUDED_)
#define AFX_DLGPOPUPREPORT_H__559AE5A3_86ED_4195_9331_4452B1CF9C95__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// DlgPopupReport.h : header file
//

#include "xShadeButton.h"
#include "DlgReportingOptions.h"
#include "6046DryEnd.h"

#include <deque>
using namespace std;

//SAW = STATUS/ALARM/WARNING
typedef enum tagSAWTYPE
{
	STATUS = 0,
	ALARM,
	WARNING	
}
SAWTYPE;

typedef enum tagALARMSTATE
{
	CLEARED = 0,
	ACTIVE,
	ACKNOWLEDGED,
	DISABLED
}
ALARMSTATE;


#pragma pack( push, SAWMSG_H_PACK, 1 )

typedef struct tagSAWMSG
{
	SAWTYPE		mainType;		
	TIME7K		Time7K;
	int 		sensorID;		//part of alarm message parsed out
	ALARMSTATE	state;			//only if type == alarm
	EALARMID	alarmID;	
	BOOL		hidden;			//don't display in refresh list, but keep for history, just in case
	LONG		extraFeild1;	//ping numbers droppped, etc.
	LONG		extraFeild2;	//ping numbers or whatever
	char		msg[256];
}
SAWMSG;

#pragma pack( pop, SAWMSG_H_PACK )

/////////////////////////////////////////////////////////////////////////////
// CDlgPopupReport dialog

class CDlgPopupReport : public CDialog
{
// Construction
public:
	
	CDlgPopupReport(CWnd* pParent = NULL);   // standard constructor

// Dialog Data
	//{{AFX_DATA(CDlgPopupReport)
	enum { IDD = IDD_DLG_POPUPREPORT };
	CxShadeButton	m_ctrlBtnEnable;
	CxShadeButton	m_ctrlCleanup;
	CxShadeButton	m_ctrlShowHistory;
	CxShadeButton	m_ctrlBtnOptions;
	CxShadeButton	m_ctrlQueryAll;
	CListCtrl		m_ctrlMessageList;
	CxShadeButton	m_ctrlDisable;
	CxShadeButton	m_ctrlAcknowledge;
	//}}AFX_DATA

	void			AddNewMessage			(	CString				message, 
												SAWTYPE				type,
												C7kStatus::EMODE	mode,
												UINT				msgID,
												TIME7K				time );

	void			FindAndClearAlarm		(	CString				msg );
// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CDlgPopupReport)
	public:
	virtual BOOL PreTranslateMessage(MSG* pMsg);
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
	//}}AFX_VIRTUAL

// Implementation
protected:

	void			PostAlarmMsg			(	CString				message );	//Add alarm to buffer, and post to display
	void			PostSysMsg				(	CString				message );
	void			PostWarningMsg			(	CString				message );	

	void			PostCurrentMsg			(	void );
	void			RefreshListFromHistory	(	void );							//refresh after deletions or updates

	void			ParseMessageToStruct	(	CString				message );

	CDlgReportingOptions	m_dlgOptions;
	
	TIME7K			currentTimeStore;
	UINT			currentMsgID;

	CImageList		*m_pImageList;

	CWnd			*m_pParentWnd;

	CString			labels[3];
	CString			stati[4];
	CString			errCauses[5];
	

	SAWMSG			m_genericMsg;	
	deque<SAWMSG>	m_vecMsgQue;
	deque<SAWMSG>	m_vecDisabledAlarms;

	// Generated message map functions
	//{{AFX_MSG(CDlgPopupReport)
	virtual BOOL OnInitDialog();
	afx_msg void OnBtnAck();
	afx_msg void OnBtnDis();
	afx_msg void OnDestroy();
	afx_msg void OnBtnOptions();
	afx_msg void OnBtnQueryall();
	afx_msg void OnBtnRem();
	afx_msg void OnClickMsglist(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnShowhistory();
	afx_msg void OnBtnEnable();
	afx_msg void OnClose();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()


	CSystemConfig	*m_pConfig;
	void LoadSettings();
	void SaveSettings();
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_DLGPOPUPREPORT_H__559AE5A3_86ED_4195_9331_4452B1CF9C95__INCLUDED_)
