// DlgDepth.cpp : implementation file
//

#include "stdafx.h"
#include "6046dryend.h"
#include "6046DryEndDlg.h"

#include "DlgDepth.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgDepth dialog


CDlgDepth::CDlgDepth(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgDepth::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgDepth)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CDlgDepth::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgDepth)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgDepth, CDialog)
	//{{AFX_MSG_MAP(CDlgDepth)
	ON_WM_TIMER()
	ON_WM_PAINT()
	ON_WM_LBUTTONDOWN()
	ON_COMMAND(ID_SETTINGS_BACKGROUND, OnSettingsBackground)
	ON_COMMAND(ID_SETTINGS_DEPTHAXIS, OnSettingsDepthaxis)
	ON_COMMAND(ID_SETTINGS_HISTORYLINE, OnSettingsHistoryline)
	ON_COMMAND(ID_SETTINGS_TEXTCOLOR, OnSettingsTextcolor)
	ON_COMMAND(ID_SETTINGS_CROSSLINES, OnSettingsCrosslines)
	ON_WM_DESTROY()
	ON_COMMAND(ID_SETTINGS_VESSEL, OnSettingsVessel)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgDepth message handlers

void CDlgDepth::OnOK() 
{
	//Override enter button being pressd by commenting out OnOK()
	//CDialog::OnOK();
}

BOOL CDlgDepth::OnInitDialog() 
{
	CDialog::OnInitDialog();

	HICON icon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	SetIcon(icon, FALSE);
	
	//Load and display dlg menu
	m_DepthMenu.LoadMenu(IDR_DEPTH_MENU);
	SetMenu(&m_DepthMenu);

	m_pConfig = (CSystemConfig*)&((CMy6046DryEndApp*)AfxGetApp())->m_SystemConfig;

	CRect temp;
	GetClientRect(&temp);	
	if(temp){
		m_DepthCtrl.InitCtrl(this,temp);
		//m_DepthCtrl.SetBottomDepth(1000);
	}

	LoadSettings();

	down  = true;
	depth = 0;

	//Test Only
	//SetTimer(1,100,NULL);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDlgDepth::OnTimer(UINT nIDEvent) 
{
	//Test Only
	if(down){
		depth++;
		if(depth >= 300)
			down = false;
	}
	else
	{
		depth--;
		if(depth ==0)
			down = true;
	}
	m_DepthCtrl.AddDepth(depth,3000-depth);
	
	CDialog::OnTimer(nIDEvent);
}

LRESULT CDlgDepth::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	if(message == WM_EXITSIZEMOVE)
	{
		CRect temp;
		GetClientRect(&temp);
		m_DepthCtrl.Resize(temp);

		GetWindowRect(&temp);
		m_pConfig->DEPWindowX	= temp.left;
		m_pConfig->DEPWindowY	= temp.top;
	}
	
	return CDialog::WindowProc(message, wParam, lParam);
}

void CDlgDepth::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	m_DepthCtrl.Refresh();
	
	// Do not call CDialog::OnPaint() for painting messages
}

void CDlgDepth::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);
}

////////////////////////////////////////////////////////////////////////////
// PUBLIC FXN
////////////////////////////////////////////////////////////////////////////

void CDlgDepth::AddDepth(double depth)
{
	m_DepthCtrl.AddDepth(depth, 0);
}

void CDlgDepth::AddGroupData( NBlueFin7kMessages::PBLUEFINRECORDTYPEHEADER	   pRecHdr,
  				   NBlueFin7kMessages::PBLUEFINNAVIGATIONMESSAGE    pNavFrame )
{
	m_DepthCtrl.AddDepth(pNavFrame->m_dDepth, pNavFrame->m_dAltitude);

	//m_DepthCtrl.SetBottomDepth(pNavFrame->m_dDepth + pNavFrame->m_dAltitude);
}
////////////////////////////////////////////////////////////////////////////
// MENU ITEM HANDLERS
////////////////////////////////////////////////////////////////////////////

void CDlgDepth::OnSettingsBackground() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_DepthCtrl.SetWaterColor(dlg.GetColor());
		m_clrWater = dlg.GetColor();
	}
	
}

void CDlgDepth::OnSettingsDepthaxis() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_DepthCtrl.SetAxisColor(dlg.GetColor());
		m_clrAxis = dlg.GetColor();

		m_pConfig->DEPWndAxis		= m_clrAxis;
		SaveSettings();
	}
	
}

void CDlgDepth::OnSettingsHistoryline() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_DepthCtrl.SetHistoryColor(dlg.GetColor());
		m_clrHistory = dlg.GetColor();

		m_pConfig->DEPWndHistory	= m_clrHistory;
		SaveSettings();
	}
	
}


void CDlgDepth::OnSettingsTextcolor() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_DepthCtrl.SetDepthTextColor(dlg.GetColor());
		m_clrText = dlg.GetColor();

		m_pConfig->DEPWndText		= m_clrText;
		SaveSettings();
	}
}


void CDlgDepth::OnSettingsCrosslines() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_DepthCtrl.SetCrossLineColor(dlg.GetColor());
		m_clrLines = dlg.GetColor();

		m_pConfig->DEPWndLines		= m_clrLines;
		SaveSettings();
	}
}


void CDlgDepth::OnSettingsVessel() 
{
	CColorDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		m_DepthCtrl.SetShipMarker(dlg.GetColor());
		m_clrShip = dlg.GetColor();

		m_pConfig->DEPWndShip	= m_clrShip;
		SaveSettings();
	}	
}

void CDlgDepth::OnDestroy() 
{
	CDialog::OnDestroy();

	SaveSettings();

	KillTimer(1);
	m_DepthCtrl.Cleanup();
	m_DepthMenu.DestroyMenu();

}

void CDlgDepth::LoadSettings()
{
	
	if(m_pConfig->Open(CSystemConfig::accessRead))
	{
		
		m_pConfig->Read();
		m_pConfig->Close();
		
		int x	= m_pConfig->DEPWindowX;
		int y	= m_pConfig->DEPWindowY;
	
		SetWindowPos(NULL,x,y,0,0,SWP_NOSIZE);

		m_clrAxis		= m_pConfig->DEPWndAxis;
		m_clrLines		= m_pConfig->DEPWndLines;
		m_clrText		= m_pConfig->DEPWndText;	
		m_clrHistory	= m_pConfig->DEPWndHistory;
		m_clrWater		= m_pConfig->DEPWndWater;
		m_clrShip		= m_pConfig->DEPWndShip;
		
		//Update Settings	
		m_DepthCtrl.SetAxisColor(m_clrAxis);
		m_DepthCtrl.SetCrossLineColor(m_clrLines);
		m_DepthCtrl.SetDepthTextColor(m_clrText);
		m_DepthCtrl.SetHistoryColor(m_clrHistory);
		m_DepthCtrl.SetWaterColor(m_clrWater);
		m_DepthCtrl.SetShipMarker(m_clrShip);	
	
	}

}

void CDlgDepth::SaveSettings()
{
	if(m_pConfig->Open(CSystemConfig::accessWrite))
	{
		m_pConfig->Save();
		m_pConfig->Close();
	}

}


BOOL CDlgDepth::PreTranslateMessage(MSG* pMsg) 
{
	
	if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
	{
		return TRUE ;
	}

	return CDialog::PreTranslateMessage(pMsg);
}

void CDlgDepth::OnClose() 
{
	((CMy6046DryEndDlg*)AfxGetMainWnd())->ForceClose(DSPDEPTH);
		
	CDialog::OnClose();
}
