#if !defined(AFX_MISSIONCONTROLSETTINGSDLG_H__A09E54D5_83AF_4AE3_9959_2CB16FA8FB2D__INCLUDED_)
#define AFX_MISSIONCONTROLSETTINGSDLG_H__A09E54D5_83AF_4AE3_9959_2CB16FA8FB2D__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// MissionControlSettingsDlg.h : header file
//

#include <remote/ModemMessage.h>
#include "Attributes.h"
#include "MessageList.h"
#include "remote/MMAgentRequest.h"
#include "DataRecipient.h"

class CDashboardRecipient;

/////////////////////////////////////////////////////////////////////////////
// CMissionControlSettingsDlg dialog

class CMissionControlSettingsDlg : public CDialog, public CDataRecipient
{
// Construction
public:
	CMissionControlSettingsDlg(CWnd* pParent = NULL);   // standard constructor
	~CMissionControlSettingsDlg();

	void setRecipient(CDashboardRecipient *recipient) 
		{ m_recipient = recipient; };
	void requestUpdate();
	void stopRequests();
	bool checkRequest(MMAgentRequest::Request * request, ModemMessage::Type type, int * period, bool blockOverride);

	void gotMessage(const ModemMessage* pMM);
	void sentMessage(const ModemMessage* pMM);

	void runCycle();

	void sendNavMessages();
	
	void setHomeDir(CString hd)
		{ m_homeDir = hd; };

// Dialog Data
	//{{AFX_DATA(CMissionControlSettingsDlg)
	enum { IDD = IDD_SETTINGS_DIALOG };
	CListBox	m_list2;
	CListCtrl	m_ListCtrl;
	CEdit	m_freq1;
	CListBox	m_list1;
	CString	m_freq1Str;
	double	m_onUpdateIndicator;
	double	m_baudRateIndicator;
	BOOL	m_RequestBlockVal;
	CString	m_MessageConfigString;
	//}}AFX_DATA


// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CMissionControlSettingsDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL


// Implementation
protected:
	CString m_homeDir;
	bool m_active;
	Attributes * m_attributes;
	MessageList * m_messageList;

	int m_messageRxCount[ModemMessage::tEND];
	int m_messageTxCount[ModemMessage::tEND];
	
	void UpdateList1();
	void UpdateList2();

	int lookupRequestNum(const char * request);
	void lookupRequestName(MMAgentRequest::Request request, char * name);

	void ApplyToSelection(MMAgentRequest::Request request, int period);

	/*
	bool getMessageEnum(const char *str, short *val);
	bool getMessageStr(ModemMessage::Type type, char *str);
	bool getMessageSize(ModemMessage::Type type, short *val);
	bool getMessageSetting(ModemMessage::Type type, MessageSetting *setting);
	*/
	void getBytes(double *baudRate,double *onUpdate);

	CDashboardRecipient *m_recipient;
	virtual BOOL OnInitDialog();
	//virtual BOOL OnCreate();

	// Generated message map functions
	//{{AFX_MSG(CMissionControlSettingsDlg)
	afx_msg void OnSelchangeList1();
	afx_msg void OnChangeFreq1();
	afx_msg void OnUpdate();
	afx_msg void OnStop();
	afx_msg void OnRequestblock();
	afx_msg void OnOncebutton();
	afx_msg void OnOnupdatebutton();
	afx_msg void OnWithnavbutton();
	afx_msg void OnPeriodicbutton();
	afx_msg void OnStopbutton();
	afx_msg void OnClose();
	afx_msg void OnSelchangeList2();
	afx_msg void OnLoadbutton();
	afx_msg void OnSavebutton();
	DECLARE_EVENTSINK_MAP()
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MISSIONCONTROLSETTINGSDLG_H__A09E54D5_83AF_4AE3_9959_2CB16FA8FB2D__INCLUDED_)
