// DisplayMngr.h: interface for the CDisplayMngr class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_DISPLAYMNGR_H__3F945B99_F590_44F4_84D9_03149F8C0E85__INCLUDED_)
#define AFX_DISPLAYMNGR_H__3F945B99_F590_44F4_84D9_03149F8C0E85__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "DlgTimeSeries.h"
#include "DlgWaterfall.h"
#include "DlgDepth.h"
#include "DlgCompass.h"
#include "DlgSBPDisplay.h"
#include "DlgNavText.h"
#include "DlgTextOnly.h"
#include "BathyDisplay.h"
#include "DlgImagery.h"

#include "SystemConfig.h"

#define MAX_DISPLAYS 10

class CDisplayMngr 
{
public:
		
						CDisplayMngr			(	);
	virtual				~CDisplayMngr			(	);

	CSystemConfig		*m_pConfig;

	BOOL				LoadDisplays			(	void );

	BOOL				InitWindows				(	void );

	void				ShowDisplay				(	DISPLAY_TYPE		etype );

	void				HideDisplay				(	DISPLAY_TYPE		etype );

	void				BringToTop				(	void );

	void				MinimizeAll				(	void );

	void				SendToBottom			(	void );

	BOOL				Init					(	void );

	void				Cleanup					(	void );

	//Functions for updating data
	void				AddRoll					(	float				roll  );

	void				AddPitch				(	float				pitch );

	void				AddHeave				(	float				heave );

	void				AddDepth				(	float				depth );

	void				AddHeading				(	float				heading );

	void				AddNav					(	double				lattitude, 
													double				longitude, 
													double				seconds);
	
	void				AddSpeed				(	float				metpersec );

	void				AddGroupData			(	NBlueFin7kMessages::PBLUEFINRECORDTYPEHEADER	pRecHdr,
													NBlueFin7kMessages::PBLUEFINNETWORKHEADER		pNetHdr,
													NBlueFin7kMessages::PBLUEFINNAVIGATIONMESSAGE   pNavFrame ); 

	//This function is overloaded to allow multiple displays of same data
	//BOOL AddSSSData(BYTE *data, int size);
	BOOL				AddWaterfallData		(	DISPLAY_TYPE		type, 
													BYTE				*data,
													int					size );
	
	//Update displays with settings
	void				SetWaterfallParams		(	DISPLAY_TYPE		type, 
													SETTINGS			*settings );

	void				AddBathyData			(	void				*dataBytes );

	void				AddImageryData			(	void				*dataBytes );

	void				RelayBeamGeometry		(	BYTE				*dataBytes );

	void				SetBeamSpacing			(	double				beamSpacing ); //used to initialize the 2DBathyDsp

	void				Add7000Data				(	void				*dataBytes );

	void				FlipDisplayedData		(	BOOL				bFlip );



private:
	void				SaveSettings			(	void );
	void				LoadSettings			(	void );

	//ALL DISPLAYS ARE REFERENCED THROUGH ARRAY
	CDialog				*m_Displays[MAX_DISPLAYS];

	HWND				m_hParentWnd;	//Use for posting messages

	R7000				m_rec7000;

	BOOL				m_bInitDone;

	void				BringAndShow			(	int displayIndex ) ;
			
};

#endif // !defined(AFX_DISPLAYMNGR_H__3F945B99_F590_44F4_84D9_03149F8C0E85__INCLUDED_)
