// DlgTimeSeries.cpp : implementation file
//

#include "stdafx.h"
#include "6046DryEndDlg.h"
#include "DlgTimeSeries.h"
#include "RollView.h"
#include "PitchView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgTimeSeries dialog


CDlgTimeSeries::CDlgTimeSeries(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgTimeSeries::IDD, pParent)
{
	//Get access to the ROLL/PITCH objects for menu handling 
	m_pTimeSeries1	  = &((CMy6046DryEndApp*)AfxGetApp())->m_TimeSeries1;
	m_pTimeSeries2  = &((CMy6046DryEndApp*)AfxGetApp())->m_TimeSeries2;
	angle = 0;

	m_ptMinWndSize.x = 300;
	m_ptMinWndSize.y = 380;

	m_rWndStart.SetRectEmpty();
	m_rWndSized.SetRectEmpty();
	m_rCtrlStart.SetRectEmpty();

	m_szDeltas.cx = 0;
	m_szDeltas.cy = 0;

	m_NavFrame.m_fRoll		= -90;
	m_NavFrame.m_fPitch		= 90;

	m_dwLastCheckScale1		= 0;
	m_dwLastCheckScale2     = 0;	

	//{{AFX_DATA_INIT(CDlgTimeSeries)
	//}}AFX_DATA_INIT
}


void CDlgTimeSeries::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgTimeSeries)
	DDX_Control(pDX, IDC_COMBO_UPDATERATE, m_ctrlUpdateRate);
	DDX_Control(pDX, IDC_CHECKROLLRT, m_ctrlChkRollRt);
	DDX_Control(pDX, IDC_CHECKROLL, m_ctrlChkRoll);
	DDX_Control(pDX, IDC_CHECKPITCHRT, m_ctrlChkPitchRt);
	DDX_Control(pDX, IDC_CHECKPITCH, m_ctrlChkPitch);
	DDX_Control(pDX, IDC_CHECKNORTHRT, m_ctrlChkNorthRt);
	DDX_Control(pDX, IDC_CHECKEASTRT, m_ctrlChkEastRt);
	DDX_Control(pDX, IDC_CHECKDEPTHRT, m_ctrlChkDepthRt);
	DDX_Control(pDX, IDC_COLORROLLRT, m_ctrlRollRt);
	DDX_Control(pDX, IDC_COLORROLL, m_ctrlRoll);
	DDX_Control(pDX, IDC_COLORPITCHRT, m_ctrlPitchRt);
	DDX_Control(pDX, IDC_COLORPITCH, m_ctrlPitch);
	DDX_Control(pDX, IDC_COLORNRTHRT, m_ctrlColorNorthRt);
	DDX_Control(pDX, IDC_COLOREASTRT, m_ctrlColorEastRt);
	DDX_Control(pDX, IDC_COLORDEPTHRT, m_ctrlColorDepthRt);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgTimeSeries, CDialog)
	//{{AFX_MSG_MAP(CDlgTimeSeries)
	ON_WM_SIZE()
	ON_WM_GETMINMAXINFO()
	ON_COMMAND(ID_COLORSETTINGS_PITCHDISPLAY_AXES, OnColorsettingsPitchdisplayAxes)
	ON_COMMAND(ID_COLORSETTINGS_PITCHDISPLAY_BACKGROUND, OnColorsettingsPitchdisplayBackground)
	ON_COMMAND(ID_SCALE_PITCHDISPLAY_5, OnScalePitchdisplay5)
	ON_COMMAND(ID_SCALE_PITCHDISPLAY_15, OnScalePitchdisplay15)
	ON_COMMAND(ID_SCALE_PITCHDISPLAY_30, OnScalePitchdisplay30)
	ON_COMMAND(ID_SCALE_PITCHDISPLAY_45, OnScalePitchdisplay45)
	ON_COMMAND(ID_SCALE_PITCHDISPLAY_90, OnScalePitchdisplay90)
	ON_COMMAND(ID_SCALE_PITCHDISPLAY_180, OnScalePitchdisplay180)
	ON_COMMAND(ID_SETTINGS_ROLLDISPLAY_AXES, OnSettingsRolldisplayAxes)
	ON_COMMAND(ID_SETTINGS_ROLLDISPLAY_BACKGROUND, OnSettingsRolldisplayBackground)
	ON_COMMAND(ID_SCALE_ROLLDISPLAY_5, OnScaleRolldisplay5)
	ON_COMMAND(ID_SCALE_ROLLDISPLAY_15, OnScaleRolldisplay15)
	ON_COMMAND(ID_SCALE_ROLLDISPLAY_30, OnScaleRolldisplay30)
	ON_COMMAND(ID_SCALE_ROLLDISPLAY_45, OnScaleRolldisplay45)
	ON_COMMAND(ID_SCALE_ROLLDISPLAY_90, OnScaleRolldisplay90)
	ON_COMMAND(ID_SCALE_ROLLDISPLAY_180, OnScaleRolldisplay180)
	ON_COMMAND(ID_SCALE_PITCHDISPLAY_OTHER, OnScalePitchdisplayOther)
	ON_COMMAND(ID_SCALE_ROLLDISPLAY_OTHER, OnScaleRolldisplayOther)
	ON_COMMAND(ID_COLORSETTINGS_PITCHDISPLAY_TEXT, OnColorsettingsPitchdisplayText)
	ON_COMMAND(ID_COLORSETTINGS_ROLLDISPLAY_TEXT, OnColorsettingsRolldisplayText)
	ON_WM_LBUTTONDOWN()
	ON_WM_TIMER()
	ON_WM_DESTROY()
	ON_WM_PAINT()
	ON_COMMAND(ID_COLORSETTINGS_ROLLDISPLAY_HISTORY_PITCH, OnColorsettingsRolldisplayHistoryPitch)
	ON_COMMAND(ID_COLORSETTINGS_ROLLDISPLAY_HISTORY_PITCHRATE, OnColorsettingsRolldisplayHistoryPitchrate)
	ON_COMMAND(ID_COLORSETTINGS_ROLLDISPLAY_HISTORY_ROLL, OnColorsettingsRolldisplayHistoryRoll)
	ON_COMMAND(ID_COLORSETTINGS_ROLLDISPLAY_HISTORY_ROLLRATE, OnColorsettingsRolldisplayHistoryRollrate)
	ON_COMMAND(ID_COLORSETTINGS_TIMESERIES2_HISTORY_DEPTHRATE, OnColorsettingsTimeseries2HistoryDepthrate)
	ON_COMMAND(ID_COLORSETTINGS_TIMESERIES2_HISTORY_EASTINGRATE, OnColorsettingsTimeseries2HistoryEastingrate)
	ON_COMMAND(ID_COLORSETTINGS_TIMESERIES2_HISTORY_NORTHINGRATE, OnColorsettingsTimeseries2HistoryNorthingrate)
	ON_BN_CLICKED(IDC_CHECKDEPTHRT, OnCheckdepthrt)
	ON_BN_CLICKED(IDC_CHECKEASTRT, OnCheckeastrt)
	ON_BN_CLICKED(IDC_CHECKNORTHRT, OnChecknorthrt)
	ON_BN_CLICKED(IDC_CHECKPITCH, OnCheckpitch)
	ON_BN_CLICKED(IDC_CHECKPITCHRT, OnCheckpitchrt)
	ON_BN_CLICKED(IDC_CHECKROLL, OnCheckroll)
	ON_BN_CLICKED(IDC_CHECKROLLRT, OnCheckrollrt)
	ON_CBN_SELCHANGE(IDC_COMBO_UPDATERATE, OnSelchangeComboUpdaterate)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgTimeSeries message handlers

BOOL CDlgTimeSeries::OnInitDialog() 
{
	CDialog::OnInitDialog();

	HICON icon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	SetIcon(icon, FALSE);
	
	m_AttitudeMenu.LoadMenu(IDR_ATTITUDE_MENU);
	SetMenu(&m_AttitudeMenu);
	
	m_pConfig = &((CMy6046DryEndApp*)AfxGetApp())->m_SystemConfig;

	m_wndSplitter.CreateStatic(this, 2, 1);
	m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CRollView), CSize(50,130), NULL);
	m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CPitchView), CSize(50,50), NULL);
	
	int x,y,cx,cy;
	x	= m_pConfig->TSWindowX;
	y	= m_pConfig->TSWindowY;
	cx	= m_pConfig->TSWindowCX;
	cy  = m_pConfig->TSWindowCY;

	SetWindowPos(NULL,x,y,cx,cy,SWP_NOSIZE);

	GetClientRect(&m_rWndStart);
	m_ptMinWndSize.x = m_rWndStart.Width();
	m_ptMinWndSize.y = m_rWndStart.Height();


	CRect rect;
	GetDlgItem(IDC_SPLIT_RECT)->GetWindowRect(&rect);
	ScreenToClient(&rect);
	m_wndSplitter.MoveWindow(&rect);

	m_rCtrlStart = rect;

	//Test Only
	//SetTimer(1,1000,NULL);

	LoadSettings();	
	
	m_pTimeSeries1->Refresh();
	m_pTimeSeries2->Refresh();

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}



void CDlgTimeSeries::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	if(m_wndSplitter.GetSafeHwnd() == NULL)
		return;

	GetClientRect(&m_rWndSized);
	m_szDeltas.cx = m_rWndStart.Width()  - m_rWndSized.Width();
	m_szDeltas.cy = m_rWndStart.Height() - m_rWndSized.Height();

	CRect temp(m_rCtrlStart.left, m_rCtrlStart.top, m_rCtrlStart.right - m_szDeltas.cx , m_rCtrlStart.bottom - m_szDeltas.cy) ;	
	
	if(m_wndSplitter.IsWindowVisible() == TRUE){
		m_wndSplitter.MoveWindow(&temp);
	}
	
}

void CDlgTimeSeries::OnGetMinMaxInfo(MINMAXINFO *lpMMI)
{
	if(lpMMI)
	{
		lpMMI->ptMinTrackSize = m_ptMinWndSize;
	}
	CDialog::OnPaint();
	CDialog::OnGetMinMaxInfo(lpMMI);
}

void CDlgTimeSeries::OnLButtonDown(UINT nFlags, CPoint point) 
{
	//MAKE WINDOWS THINK WE CLICKED ON THE CAPTION BAR,
	//SO THE DIALOG CAN BE MOVED BY CLICKING ANYWHERE ON IT.
    PostMessage( WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));
	
	CDialog::OnLButtonDown(nFlags, point);
}

//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//BEGIN PUBLIC FXNS
//////////////////////////////////////////////////////////////////////

void CDlgTimeSeries::AddRoll(float roll)
{

}

void CDlgTimeSeries::AddPitch(float pitch)
{

}

void CDlgTimeSeries::AddRollRate(float rollRate)
{

}

void CDlgTimeSeries::AddPitchRate(float pitchRate)
{

}

void CDlgTimeSeries::AddEastRate(float eastRate)
{

}

void CDlgTimeSeries::AddNorthRate(float northRate)
{

}

void CDlgTimeSeries::AddDepthRate(float depthRate)
{

}

void CDlgTimeSeries::AddGroup(	NBlueFin7kMessages::PBLUEFINRECORDTYPEHEADER	  pRecHdr,
							    NBlueFin7kMessages::PBLUEFINNAVIGATIONMESSAGE     pNavFrame )
{

	//TRACE("TESTING NAV OUTPUT:\r\n Roll: %f\r\nPitch: %f\r\n",pNavFrame->m_fRoll,pNavFrame->m_fPitch);
	//return;

	m_pTimeSeries1->AddAngle(pNavFrame->m_fRoll, ROLL);
	m_pTimeSeries1->AddAngle(pNavFrame->m_fPitch, PITCH);
	m_pTimeSeries1->AddAngle(pNavFrame->m_fRollRate, ROLLRT);
	m_pTimeSeries1->AddAngle(pNavFrame->m_fPitchRate, PITCHRT);
	m_pTimeSeries2->AddAngle(pNavFrame->m_fEastingRate, EASTRT);
	m_pTimeSeries2->AddAngle(pNavFrame->m_fNorthingRate, NORTHRT);
	m_pTimeSeries2->AddAngle(pNavFrame->m_fDepthRate, DEPTHRT);

	m_pTimeSeries1->Refresh();
	m_pTimeSeries2->Refresh();
}

/////////////////////////
//COLOR SETTINGS - PITCH
/////////////////////////
void CDlgTimeSeries::OnColorsettingsPitchdisplayAxes() 
{
	CColorDialog dlg;
	dlg.SetParent(AfxGetMainWnd());

	if(dlg.DoModal() == IDOK)
	{
		m_clrTS2_AXIS = dlg.GetColor();
		m_pTimeSeries2->SetAxisColor(m_clrTS2_AXIS);
	}

	
	m_pConfig->clrTS2_AXIS	= m_clrTS2_AXIS;
	SaveSettings();
}

void CDlgTimeSeries::OnColorsettingsPitchdisplayBackground() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_clrTS2_BK = dlg.GetColor();
		m_pTimeSeries2->SetPlaneColor(m_clrTS2_BK);
	}
	
	m_pConfig->clrTS2_BK	= m_clrTS2_BK;
	SaveSettings();
}

void CDlgTimeSeries::OnColorsettingsPitchdisplayText() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_clrTS2_FONT = dlg.GetColor();
		m_pTimeSeries2->SetFontColor(m_clrTS2_FONT);
	}
	
	m_pConfig->clrTS2_FONT	= m_clrTS2_FONT;
	SaveSettings();
	
}

void CDlgTimeSeries::OnColorsettingsTimeseries2HistoryEastingrate() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_clrTS2_Line1 = dlg.GetColor();
		m_pTimeSeries1->SetLineColor(m_clrTS2_Line1, EASTRT);
		Invalidate();
	}	
	
	m_pConfig->clrTS2_Line1 = m_clrTS2_Line1;
	SaveSettings();
}

void CDlgTimeSeries::OnColorsettingsTimeseries2HistoryNorthingrate() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_clrTS2_Line2 = dlg.GetColor();
		m_pTimeSeries1->SetLineColor(m_clrTS2_Line2, NORTHRT);
		Invalidate();
	}	
	
	m_pConfig->clrTS2_Line2 = m_clrTS2_Line2;
	SaveSettings();
}

void CDlgTimeSeries::OnColorsettingsTimeseries2HistoryDepthrate() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_clrTS2_Line3 = dlg.GetColor();
		m_pTimeSeries1->SetLineColor(m_clrTS2_Line3, DEPTHRT);
		Invalidate();
	}	
	
	m_pConfig->clrTS2_Line3 = m_clrTS2_Line3;
	SaveSettings();
}

/////////////////////////
//SCALE SETTINGS - PITCH
/////////////////////////
void CDlgTimeSeries::OnScalePitchdisplay5() 
{
	m_pTimeSeries2->SetScale(5);
	m_uiTS2_Scale = 5;

	m_pConfig->uiTS2_Scale  = m_uiTS2_Scale;
	SaveSettings();

	ClearAllMenusChecks();
	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_5, MF_CHECKED);
	m_AttitudeMenu.CheckMenuItem(m_dwLastCheckScale2, MF_UNCHECKED);
	m_dwLastCheckScale2 = ID_SCALE_PITCHDISPLAY_5;
}

void CDlgTimeSeries::OnScalePitchdisplay15() 
{
	m_pTimeSeries2->SetScale(15);
	m_uiTS2_Scale = 15;

	m_pConfig->uiTS2_Scale  = m_uiTS2_Scale;
	SaveSettings();
	ClearAllMenusChecks();
	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_15, MF_CHECKED);
	m_AttitudeMenu.CheckMenuItem(m_dwLastCheckScale2, MF_UNCHECKED);
	m_dwLastCheckScale2 = ID_SCALE_PITCHDISPLAY_15;
}

void CDlgTimeSeries::OnScalePitchdisplay30() 
{
	m_pTimeSeries2->SetScale(30);
	m_uiTS2_Scale = 30;

	m_pConfig->uiTS2_Scale  = m_uiTS2_Scale;
	SaveSettings();
	ClearAllMenusChecks();
	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_30, MF_CHECKED);
	m_AttitudeMenu.CheckMenuItem(m_dwLastCheckScale2, MF_UNCHECKED);
	m_dwLastCheckScale2 = ID_SCALE_PITCHDISPLAY_30;
}

void CDlgTimeSeries::OnScalePitchdisplay45() 
{
	m_pTimeSeries2->SetScale(45);
	m_uiTS2_Scale = 45;

	m_pConfig->uiTS2_Scale  = m_uiTS2_Scale;
	SaveSettings();
	ClearAllMenusChecks();
	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_45, MF_CHECKED);
	m_AttitudeMenu.CheckMenuItem(m_dwLastCheckScale2, MF_UNCHECKED);
	m_dwLastCheckScale2 = ID_SCALE_PITCHDISPLAY_45;
}

void CDlgTimeSeries::OnScalePitchdisplay90() 
{
	m_pTimeSeries2->SetScale(90);
	m_uiTS2_Scale = 90;

	m_pConfig->uiTS2_Scale  = m_uiTS2_Scale;
	SaveSettings();
	ClearAllMenusChecks();
	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_90, MF_CHECKED);
	m_AttitudeMenu.CheckMenuItem(m_dwLastCheckScale2, MF_UNCHECKED);
	m_dwLastCheckScale2 = ID_SCALE_PITCHDISPLAY_90;
}

void CDlgTimeSeries::OnScalePitchdisplay180() 
{	
	m_pTimeSeries2->SetScale(180);
	m_uiTS2_Scale = 180;

	m_pConfig->uiTS2_Scale  = m_uiTS2_Scale;
	SaveSettings();
	ClearAllMenusChecks();
	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_180, MF_CHECKED);
	m_AttitudeMenu.CheckMenuItem(m_dwLastCheckScale2, MF_UNCHECKED);
	m_dwLastCheckScale2 = ID_SCALE_PITCHDISPLAY_180;
}

void CDlgTimeSeries::OnScalePitchdisplayOther() 
{
	CDlgSimpleInput m_dlgInput;
	if(m_dlgInput.DoModal() == IDOK)
	{
		m_pTimeSeries2->SetScale(m_dlgInput.input);
		m_uiTS2_Scale = m_dlgInput.input;
	}

	m_pConfig->uiTS2_Scale  = m_uiTS2_Scale;
	SaveSettings();

	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_OTHER, MF_CHECKED);
	m_AttitudeMenu.CheckMenuItem(m_dwLastCheckScale2, MF_UNCHECKED);
	m_dwLastCheckScale2 = ID_SCALE_PITCHDISPLAY_OTHER;
}

void CDlgTimeSeries::OnSettingsRolldisplayAxes() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_pTimeSeries1->SetAxisColor(dlg.GetColor());
		m_clrTS1_AXIS = dlg.GetColor();
	}

	m_pConfig->clrTS1_AXIS	= m_clrTS1_AXIS;
	SaveSettings();
}

void CDlgTimeSeries::OnSettingsRolldisplayBackground() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_pTimeSeries1->SetPlaneColor(dlg.GetColor());
		m_clrTS1_BK = dlg.GetColor();
	}

	m_pConfig->clrTS1_BK	= m_clrTS1_BK;
	SaveSettings();
}


void CDlgTimeSeries::OnColorsettingsRolldisplayText() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_pTimeSeries1->SetFontColor(dlg.GetColor());
		m_clrTS1_FONT = dlg.GetColor();
	}	

	m_pConfig->clrTS1_FONT	= m_clrTS1_FONT;
	SaveSettings();
}


void CDlgTimeSeries::OnColorsettingsRolldisplayHistoryRoll() 
{
	CColorDialog dlg;

	if(dlg.DoModal() == IDOK)
	{
		m_clrTS1_Line1 = dlg.GetColor();
		m_pTimeSeries1->SetLineColor(m_clrTS1_Line1, ROLL);
		Invalidate();
	}	

	m_pConfig->clrTS1_Line1 = m_clrTS1_Line1;
	SaveSettings();
	
}

void CDlgTimeSeries::OnColorsettingsRolldisplayHistoryPitch() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_clrTS1_Line2 = dlg.GetColor();
		m_pTimeSeries1->SetLineColor(m_clrTS1_Line2, PITCH);
		Invalidate();
	}	

	m_pConfig->clrTS1_Line2 = m_clrTS1_Line2;
	SaveSettings();
}

void CDlgTimeSeries::OnColorsettingsRolldisplayHistoryRollrate() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_clrTS1_Line3 = dlg.GetColor();
		m_pTimeSeries1->SetLineColor(m_clrTS1_Line3, ROLLRT);
		Invalidate();
	}	

	m_pConfig->clrTS1_Line3 = m_clrTS1_Line3;
	SaveSettings();	
}

void CDlgTimeSeries::OnColorsettingsRolldisplayHistoryPitchrate() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_clrTS1_Line4 = dlg.GetColor();
		m_pTimeSeries1->SetLineColor(m_clrTS1_Line4, PITCHRT);
		Invalidate();
	}
	
	m_pConfig->clrTS1_Line4 = m_clrTS1_Line4;
	SaveSettings();
	
}

/////////////////////////
//SCALE SETTINGS - ROLL
/////////////////////////

void CDlgTimeSeries::OnScaleRolldisplay5() 
{
	m_pTimeSeries1->SetScale(5);
	m_uiTS1_Scale = 5;

	m_pConfig->uiTS1_Scale  = m_uiTS1_Scale;
	SaveSettings();

	m_AttitudeMenu.CheckMenuItem(ID_SCALE_ROLLDISPLAY_5, MF_CHECKED);
	m_AttitudeMenu.CheckMenuItem(m_dwLastCheckScale1, MF_UNCHECKED);
	m_dwLastCheckScale1 = ID_SCALE_ROLLDISPLAY_5;
}

void CDlgTimeSeries::OnScaleRolldisplay15() 
{
	m_pTimeSeries1->SetScale(15);
	m_uiTS1_Scale = 15;

	m_pConfig->uiTS1_Scale  = m_uiTS1_Scale;
	SaveSettings();

	m_AttitudeMenu.CheckMenuItem(ID_SCALE_ROLLDISPLAY_15, MF_CHECKED);
	m_AttitudeMenu.CheckMenuItem(m_dwLastCheckScale1, MF_UNCHECKED);
	m_dwLastCheckScale1 = ID_SCALE_ROLLDISPLAY_15;
}

void CDlgTimeSeries::OnScaleRolldisplay30() 
{
	m_pTimeSeries1->SetScale(30);
	m_uiTS1_Scale = 30;

	m_pConfig->uiTS1_Scale  = m_uiTS1_Scale;
	SaveSettings();

	m_AttitudeMenu.CheckMenuItem(ID_SCALE_ROLLDISPLAY_30, MF_CHECKED);
	m_AttitudeMenu.CheckMenuItem(m_dwLastCheckScale1, MF_UNCHECKED);
	m_dwLastCheckScale1 = ID_SCALE_ROLLDISPLAY_30;
}

void CDlgTimeSeries::OnScaleRolldisplay45() 
{
	m_pTimeSeries1->SetScale(45);
	m_uiTS1_Scale = 45;

	m_pConfig->uiTS1_Scale  = m_uiTS1_Scale;
	SaveSettings();

	m_AttitudeMenu.CheckMenuItem(ID_SCALE_ROLLDISPLAY_45, MF_CHECKED);
	m_AttitudeMenu.CheckMenuItem(m_dwLastCheckScale1, MF_UNCHECKED);
	m_dwLastCheckScale1 = ID_SCALE_ROLLDISPLAY_45;
}

void CDlgTimeSeries::OnScaleRolldisplay90() 
{
	m_pTimeSeries1->SetScale(90);
	m_uiTS1_Scale = 90;

	m_pConfig->uiTS1_Scale  = m_uiTS1_Scale;
	SaveSettings();

	m_AttitudeMenu.CheckMenuItem(ID_SCALE_ROLLDISPLAY_90, MF_CHECKED);
	m_AttitudeMenu.CheckMenuItem(m_dwLastCheckScale1, MF_UNCHECKED);
	m_dwLastCheckScale1 = ID_SCALE_ROLLDISPLAY_90;
}

void CDlgTimeSeries::OnScaleRolldisplay180() 
{
	//m_AttitudeMenu

	m_pTimeSeries1->SetScale(180);
	m_uiTS1_Scale = 180;

	m_pConfig->uiTS1_Scale  = m_uiTS1_Scale;
	SaveSettings();

	m_AttitudeMenu.CheckMenuItem(ID_SCALE_ROLLDISPLAY_180, MF_CHECKED);
	m_AttitudeMenu.CheckMenuItem(m_dwLastCheckScale1, MF_UNCHECKED);
	m_dwLastCheckScale1 = ID_SCALE_ROLLDISPLAY_180;
}

void CDlgTimeSeries::OnScaleRolldisplayOther() 
{
	CDlgSimpleInput m_dlgInput;
	if(m_dlgInput.DoModal() == IDOK)
	{
		m_pTimeSeries1->SetScale(m_dlgInput.input);
		m_uiTS1_Scale = m_dlgInput.input;
	}

	m_pConfig->uiTS1_Scale  = m_uiTS1_Scale;
	SaveSettings();

	m_AttitudeMenu.CheckMenuItem(ID_SCALE_ROLLDISPLAY_OTHER, MF_CHECKED);
	m_AttitudeMenu.CheckMenuItem(m_dwLastCheckScale1, MF_UNCHECKED);
	m_dwLastCheckScale1 = ID_SCALE_ROLLDISPLAY_OTHER;
}


void CDlgTimeSeries::OnTimer(UINT nIDEvent) 
{
	AddGroup(&m_RecHdr,&m_NavFrame);

	m_NavFrame.m_fRoll++;
	m_NavFrame.m_fPitch++;
	
	if(m_NavFrame.m_fRoll == 0)
		m_NavFrame.m_fRoll = -90;

	if(m_NavFrame.m_fPitch == 90)
		m_NavFrame.m_fPitch = 0;

	CDialog::OnTimer(nIDEvent);
}

void CDlgTimeSeries::OnDestroy() 
{
	CDialog::OnDestroy();
	
	SaveSettings();

	m_pTimeSeries1->Cleanup();
	m_pTimeSeries2->Cleanup();

	m_AttitudeMenu.DestroyMenu();
	
}

void CDlgTimeSeries::LoadSettings()
{
	if(m_pConfig->Open(CSystemConfig::accessRead))
	{	
		m_pConfig->Read();
		m_pConfig->Close();
	}

	////////////////////////////
	//Set data history colors
	m_clrTS1_Line1	= m_pConfig->clrTS1_Line1;
	m_clrTS1_Line2	= m_pConfig->clrTS1_Line2;
	m_clrTS1_Line3	= m_pConfig->clrTS1_Line3;
	m_clrTS1_Line4	= m_pConfig->clrTS1_Line4;

	m_clrTS2_Line1	= m_pConfig->clrTS2_Line1;
	m_clrTS2_Line2	= m_pConfig->clrTS2_Line2;
	m_clrTS2_Line3	= m_pConfig->clrTS2_Line3;

	m_pTimeSeries1->SetLineColor(m_clrTS1_Line1,ROLL);
	m_pTimeSeries1->SetLineColor(m_clrTS1_Line2,PITCH);
	m_pTimeSeries1->SetLineColor(m_clrTS1_Line3,ROLLRT);
	m_pTimeSeries1->SetLineColor(m_clrTS1_Line4,PITCHRT);
	m_pTimeSeries2->SetLineColor(m_clrTS2_Line1,EASTRT);
	m_pTimeSeries2->SetLineColor(m_clrTS2_Line2,NORTHRT);
	m_pTimeSeries2->SetLineColor(m_clrTS2_Line3,DEPTHRT);

	////////////////////////////
	//Set other colors
	m_clrTS1_BK		= m_pConfig->clrTS1_BK;
	m_clrTS1_AXIS	= m_pConfig->clrTS1_AXIS;
	m_clrTS1_FONT	= m_pConfig->clrTS1_FONT;	

	m_pTimeSeries1->SetPlaneColor(m_clrTS1_BK);
	m_pTimeSeries1->SetAxisColor(m_clrTS1_AXIS);
	m_pTimeSeries1->SetFontColor(m_clrTS1_FONT);

	m_clrTS2_BK		= m_pConfig->clrTS2_BK;
	m_clrTS2_AXIS	= m_pConfig->clrTS2_AXIS;
	m_clrTS2_FONT	= m_pConfig->clrTS2_FONT;
	
	m_pTimeSeries2->SetPlaneColor(m_clrTS2_BK);
	m_pTimeSeries2->SetAxisColor(m_clrTS2_AXIS);
	m_pTimeSeries2->SetFontColor(m_clrTS2_FONT);

	//These are brute force switched for the menu item checks
	m_uiTS1_Scale	= m_pConfig->uiTS1_Scale;
	m_pTimeSeries1->SetScale(m_uiTS1_Scale);
	switch(m_uiTS1_Scale)
	{
	case 5:		m_AttitudeMenu.CheckMenuItem(ID_SCALE_ROLLDISPLAY_5, MF_CHECKED); 
				m_dwLastCheckScale1 = ID_SCALE_ROLLDISPLAY_5;break;

	case 15:	m_AttitudeMenu.CheckMenuItem(ID_SCALE_ROLLDISPLAY_15, MF_CHECKED); 
				m_dwLastCheckScale1 = ID_SCALE_ROLLDISPLAY_15;break;

	case 30:	m_AttitudeMenu.CheckMenuItem(ID_SCALE_ROLLDISPLAY_30, MF_CHECKED); 
				m_dwLastCheckScale1 = ID_SCALE_ROLLDISPLAY_30;break;

	case 45:	m_AttitudeMenu.CheckMenuItem(ID_SCALE_ROLLDISPLAY_45, MF_CHECKED); 
				m_dwLastCheckScale1 = ID_SCALE_ROLLDISPLAY_45;break;

	case 90:	m_AttitudeMenu.CheckMenuItem(ID_SCALE_ROLLDISPLAY_90, MF_CHECKED); 
				m_dwLastCheckScale1 = ID_SCALE_ROLLDISPLAY_90;break;

	case 180:	m_AttitudeMenu.CheckMenuItem(ID_SCALE_ROLLDISPLAY_180, MF_CHECKED); 
				m_dwLastCheckScale1 = ID_SCALE_ROLLDISPLAY_180;break;

	default:    m_AttitudeMenu.CheckMenuItem(ID_SCALE_ROLLDISPLAY_OTHER, MF_CHECKED); 
				m_dwLastCheckScale1 = ID_SCALE_ROLLDISPLAY_OTHER;break;
	}
	
	m_uiTS2_Scale	= m_pConfig->uiTS2_Scale;
	m_pTimeSeries2->SetScale(m_uiTS2_Scale);
	switch(m_uiTS2_Scale)
	{
	case 5:		m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_5, MF_CHECKED);
				m_dwLastCheckScale2 = ID_SCALE_ROLLDISPLAY_5;break;
				
	case 15:	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_15, MF_CHECKED); 
				m_dwLastCheckScale2 = ID_SCALE_ROLLDISPLAY_15;break;

	case 30:	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_30, MF_CHECKED); 
				m_dwLastCheckScale2 = ID_SCALE_ROLLDISPLAY_30;break;
	
	case 45:	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_45, MF_CHECKED); 
				m_dwLastCheckScale2 = ID_SCALE_ROLLDISPLAY_45;break;
	
	case 90:	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_90, MF_CHECKED); 
				m_dwLastCheckScale2 = ID_SCALE_ROLLDISPLAY_90;break;
	
	case 180:	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_180, MF_CHECKED); 
				m_dwLastCheckScale2 = ID_SCALE_ROLLDISPLAY_180;break;
	
	default:    m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_OTHER, MF_CHECKED);
				m_dwLastCheckScale2 = ID_SCALE_ROLLDISPLAY_OTHER;break;
	}

	////////////////////////////
	//Set flags for what is active
	bRoll		    = m_pConfig->bShowRoll;
	bPitch			= m_pConfig->bShowPitch;
	bRollRate		= m_pConfig->bShowRollRate;
	bPitchRate		= m_pConfig->bShowPitchRate;
	bEastRate		= m_pConfig->bShowEastRate;
	bNorthRate		= m_pConfig->bShowNorthRate;
	bDepthRate		= m_pConfig->bShowDepthRate;

	m_ctrlChkRoll.SetCheck(bRoll);	
	m_ctrlChkPitch.SetCheck(bPitch);	
	m_ctrlChkRollRt.SetCheck(bRollRate);
	m_ctrlChkPitchRt.SetCheck(bPitchRate);
	m_ctrlChkNorthRt.SetCheck(bNorthRate);
	m_ctrlChkEastRt	.SetCheck(bEastRate);
	m_ctrlChkDepthRt.SetCheck(bDepthRate);

	m_pTimeSeries1->m_bLine1 = bRoll;
	m_pTimeSeries1->m_bLine2 = bPitch;
	m_pTimeSeries1->m_bLine3 = bRollRate;
	m_pTimeSeries1->m_bLine4 = bPitchRate;

	m_pTimeSeries2->m_bLine1 = bEastRate;
	m_pTimeSeries2->m_bLine2 = bNorthRate;
	m_pTimeSeries2->m_bLine3 = bDepthRate;

	m_ctrlUpdateRate.SetCurSel(m_pConfig->TSWindowUpdateRate);

	m_pTimeSeries1->SetUpdateRate(m_ctrlUpdateRate.GetCurSel());
	m_pTimeSeries2->SetUpdateRate(m_ctrlUpdateRate.GetCurSel());
}

void CDlgTimeSeries::SaveSettings()
{	
	if(m_pConfig->Open(CSystemConfig::accessWrite))
	{	
		m_pConfig->Save();
		m_pConfig->Close();
	}
}

void CDlgTimeSeries::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	CBrush brush;
	CRect temp;

	//These paint the little line color boxes 

	//LINE 1
	brush.CreateSolidBrush(m_clrTS1_Line1);	
	TRACE("Painted roll box : color = %d\r\n", m_clrTS1_Line1);
	m_ctrlRoll.GetWindowRect(&temp);
	ScreenToClient(&temp);
	dc.FillRect(&temp, &brush);	
	brush.DeleteObject();

	//LINE 2
	brush.CreateSolidBrush(m_clrTS1_Line2);	
	m_ctrlPitch.GetWindowRect(&temp);
	ScreenToClient(&temp);
	dc.FillRect(&temp, &brush);	
	brush.DeleteObject();

	//LINE 3
	brush.CreateSolidBrush(m_clrTS1_Line3);	
	m_ctrlRollRt.GetWindowRect(&temp);
	ScreenToClient(&temp);
	dc.FillRect(&temp, &brush);	
	brush.DeleteObject();

	//LINE 4
	brush.CreateSolidBrush(m_clrTS1_Line4);	
	m_ctrlPitchRt.GetWindowRect(&temp);
	ScreenToClient(&temp);
	dc.FillRect(&temp, &brush);	
	brush.DeleteObject();

	//LINE 5
	brush.CreateSolidBrush(m_clrTS2_Line1);	
	m_ctrlColorEastRt.GetWindowRect(&temp);
	ScreenToClient(&temp);
	dc.FillRect(&temp, &brush);	
	brush.DeleteObject();

	//LINE 6
	brush.CreateSolidBrush(m_clrTS2_Line2);	
	m_ctrlColorNorthRt.GetWindowRect(&temp);
	ScreenToClient(&temp);
	dc.FillRect(&temp, &brush);	
	brush.DeleteObject();

	//LINE 7
	brush.CreateSolidBrush(m_clrTS2_Line3);	
	m_ctrlColorDepthRt.GetWindowRect(&temp);
	ScreenToClient(&temp);
	dc.FillRect(&temp, &brush);	
	brush.DeleteObject();
}


void CDlgTimeSeries::OnCheckroll() 
{
	bRoll = !bRoll;
	m_pTimeSeries1->m_bLine1 = bRoll;
	m_pTimeSeries1->Refresh();

	m_pConfig->bShowRoll = bRoll;
	SaveSettings();
}

void CDlgTimeSeries::OnCheckpitch() 
{
	bPitch = !bPitch;
	m_pTimeSeries1->m_bLine2 = bPitch;
	m_pTimeSeries1->Refresh();

	m_pConfig->bShowPitch = bPitch;
	SaveSettings();
}

void CDlgTimeSeries::OnCheckrollrt() 
{
	bRollRate = !bRollRate;
	m_pTimeSeries1->m_bLine3 = bRollRate;
	m_pTimeSeries1->Refresh();

	m_pConfig->bShowRollRate = bRollRate;
	SaveSettings();
}

void CDlgTimeSeries::OnCheckpitchrt() 
{
	bPitchRate = !bPitchRate;
	m_pTimeSeries1->m_bLine4 = bPitchRate;
	m_pTimeSeries1->Refresh();

	m_pConfig->bShowPitchRate = bPitchRate;
	SaveSettings();
}

void CDlgTimeSeries::OnCheckeastrt() 
{
	bEastRate = !bEastRate;
	m_pTimeSeries2->m_bLine1 = bEastRate;
	m_pTimeSeries2->Refresh();

	m_pConfig->bShowEastRate = bEastRate;
	SaveSettings();
}

void CDlgTimeSeries::OnChecknorthrt() 
{
	bNorthRate = !bNorthRate;
	m_pTimeSeries2->m_bLine2 = bNorthRate;
	m_pTimeSeries2->Refresh();

	m_pConfig->bShowNorthRate = bNorthRate;
	SaveSettings();
}

void CDlgTimeSeries::OnCheckdepthrt() 
{
	bDepthRate = !bDepthRate;
	m_pTimeSeries2->m_bLine3 = bDepthRate;
	m_pTimeSeries2->Refresh();

	m_pConfig->bShowDepthRate = bDepthRate;
	SaveSettings();
}

void CDlgTimeSeries::OnSelchangeComboUpdaterate() 
{
	m_pTimeSeries1->SetUpdateRate(m_ctrlUpdateRate.GetCurSel());
	m_pTimeSeries2->SetUpdateRate(m_ctrlUpdateRate.GetCurSel());
	
	m_pConfig->TSWindowUpdateRate = m_ctrlUpdateRate.GetCurSel();
	SaveSettings();
}

BOOL CDlgTimeSeries::PreTranslateMessage(MSG* pMsg) 
{
	if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
	{
		return TRUE ;
	}
	return CDialog::PreTranslateMessage(pMsg);
}

LRESULT CDlgTimeSeries::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	if(message == WM_EXITSIZEMOVE)
	{
		CRect rect;
		GetWindowRect(&rect);

		m_pConfig->TSWindowX	= rect.left;
		m_pConfig->TSWindowY	= rect.top;
		m_pConfig->TSWindowCX	= rect.Width();
		m_pConfig->TSWindowCY	= rect.Height();

		SaveSettings();

	}
	
	return CDialog::WindowProc(message, wParam, lParam);
}

void CDlgTimeSeries::OnClose() 
{
	((CMy6046DryEndDlg*)AfxGetMainWnd())->ForceClose(DSPATT);
	
	CDialog::OnClose();
}

void CDlgTimeSeries::ClearAllMenusChecks()
{
	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_5, MF_UNCHECKED);
				
	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_15, MF_UNCHECKED); 

	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_30, MF_UNCHECKED); 
	
	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_45, MF_UNCHECKED); 
	
	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_90, MF_UNCHECKED); 
	
	m_AttitudeMenu.CheckMenuItem(ID_SCALE_PITCHDISPLAY_180, MF_UNCHECKED); 
	
}
