// TabManager.cpp : implementation file
//

#include "stdafx.h"
#include "6046DryEnd.h"
#include "TabManager.h"

////////////////////////
//TABBED DLG INCLUDES
#include "DlgTCP.h"
#include "DlgSensorSetup.h"
#include "DlgPlaybackSetup.h"
#include "DlgSBPParams.h"
#include "DlgSSParams.h"
#include "DlgSSParams2.h"
#include "Dlg7KMultitab.h"
#include "DlgTriggerCtrl.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTabManager

CTabManager::CTabManager()
{
	m_tabPages[0]	 = new CDlgTCP;
	m_tabPages[1]	 = new CDlgSensorSetup;
	m_tabPages[2]	 = new CDlgSSParams;
	m_tabPages[3]	 = new CDlgSSParams2;
	m_tabPages[4]	 = new CDlgSBPParams;
	m_tabPages[5]	 = new CDlg7KMultitab;
	//m_tabPages[6]	 = new CDlgTriggerCtrl;
	m_tabPages[6]	 = new CDlgPlaybackSetup;

}

CTabManager::~CTabManager()
{
	
}


BEGIN_MESSAGE_MAP(CTabManager, CTabCtrl)
	//{{AFX_MSG_MAP(CTabManager)
	ON_WM_LBUTTONDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTabManager message handlers

void CTabManager::Init()
{
	m_tabCurrent=0;

	m_tabPages[0]->Create(IDD_DLG_TCP, this);
	m_tabPages[1]->Create(IDD_DLG_SENSOR_SETUP, this);
	m_tabPages[2]->Create(IDD_DLG_SSPARAMS, this);
	m_tabPages[3]->Create(IDD_DLG_SSPARAMS2, this);
	m_tabPages[4]->Create(IDD_DLG_SBPPARAMS, this);
	m_tabPages[5]->Create(IDD_DLG_7KMULTITAB, this);
	//m_tabPages[6]->Create(IDD_DLG_TRIGGERCTRL, this);
	m_tabPages[6]->Create(IDD_DLG_PLAYBACK_SET, this);
	

	m_tabPages[0]->ShowWindow(SW_HIDE);
	m_tabPages[1]->ShowWindow(SW_HIDE);
    m_tabPages[2]->ShowWindow(SW_HIDE);
	m_tabPages[3]->ShowWindow(SW_HIDE);
	m_tabPages[4]->ShowWindow(SW_HIDE);
	m_tabPages[5]->ShowWindow(SW_HIDE);
	m_tabPages[6]->ShowWindow(SW_HIDE);
	//m_tabPages[7]->ShowWindow(SW_HIDE);

	SetRect();
}

void CTabManager::Cleanup()
{
	for(int nCount=0; nCount < NUM_TABS; nCount++)
	{
		m_tabPages[nCount]->DestroyWindow();
		delete m_tabPages[nCount];
		m_tabPages[nCount] = NULL;
	}
}

void CTabManager::SetRect()
{
	CRect tabRect, itemRect;
	int nX, nY, nXc, nYc;

	GetClientRect(&tabRect);
	GetItemRect(0, &itemRect);

	nX=itemRect.left;
	nY=itemRect.bottom+1;
	nXc=tabRect.right-itemRect.left-1;
	nYc=tabRect.bottom-nY-1;

	m_tabPages[0]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
	for(int nCount=1; nCount < NUM_TABS; nCount++){
		m_tabPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
	}

	
}

void CTabManager::OnLButtonDown(UINT nFlags, CPoint point) 
{
	CTabCtrl::OnLButtonDown(nFlags, point);
	// TODO: Add your message handler code here and/or call default
	if(m_tabCurrent != GetCurFocus()){
		m_tabPages[m_tabCurrent]->ShowWindow(SW_HIDE);
		m_tabCurrent=GetCurFocus();
		m_tabPages[m_tabCurrent]->ShowWindow(SW_SHOW);
		m_tabPages[m_tabCurrent]->SetFocus();
	}	
}

void CTabManager::ShowPlayback()
{
	m_tabPages[m_tabCurrent]->ShowWindow(SW_HIDE);
	m_tabPages[6]->ShowWindow(SW_SHOW);
	m_tabPages[6]->SetFocus();	
	m_tabCurrent = 6;
}

//This function supports the removal of the last tab,
//which may be the current one or not
void CTabManager::GoBack()
{
		m_tabPages[6]->ShowWindow(SW_HIDE);
		if(m_tabCurrent == 6)
			m_tabCurrent -= 1;
		m_tabPages[m_tabCurrent]->ShowWindow(SW_SHOW);
		m_tabPages[m_tabCurrent]->SetFocus();
		m_tabPages[m_tabCurrent]->RedrawWindow();
}

//Each dialog maintains its own index and sends that to
//the main dialog for changes etc...
void CTabManager::UpdateSensorIdx(UINT type, int index)
{
	//First lets update the Display Setup Dialog...
	((CDlgSensorSetup*)m_tabPages[SETUPINDEX])->AddSensorIndex(type, index);

	switch(type)
	{
	case HFSS:		{((CDlgSSParams*)m_tabPages[HFSSINDEX])->SetSensorIndex(index); break;}
	case LFSS:		{((CDlgSSParams2*)m_tabPages[LFSSINDEX])->SetSensorIndex(index);break;}
	case SBPSS:		{((CDlgSBPParams*)m_tabPages[SBPINDEX])->SetSensorIndex(index);break;}
	case SYS7K:		{((CDlg7KMultitab*)m_tabPages[SYS7KINDEX])->SetSensorIndex(index);break;}
	default:	break;
	}
}

void CTabManager::UpdateLoggingDir( char *loggingDir )
{
	((CDlgTCP*)m_tabPages[TCP])->UpdateLoggingDirectory(loggingDir);
}

void CTabManager::UpdatePulseFile(UINT type, CString fileName)
{
	//TRACE("UPDATING PULSE INDEX %d, ""%s""\r\n", type, fileName); 
	switch(type)
	{
	case HFSS:	{((CDlgSSParams*)m_tabPages[HFSSINDEX])->AddPulseFile(fileName) ; break;}
	case LFSS:	{((CDlgSSParams2*)m_tabPages[LFSSINDEX])->AddPulseFile(fileName) ;break;}
	case SBPSS:	{((CDlgSBPParams*)m_tabPages[SBPINDEX])->AddPulseFile(fileName) ;break;}
	default:	break;
	}
}

void CTabManager::ClearAllSensors()
{
	//Notify Sensor Setup Dialog to UNLOAD current sensors
	((CDlgSensorSetup*)m_tabPages[1])->EnterPlaybackMode();
}

void CTabManager::ReplaceLastSensors()
{
	//Notify Sensor Setup Dialog to RELOAD current sensors
	((CDlgSensorSetup*)m_tabPages[1])->ExitPlaybackMode();
}

void CTabManager::NotifyTab(UINT index, DWORD message)
{
	HWND wnd = m_tabPages[index]->m_hWnd;
	if(wnd)
		::PostMessage(wnd, message, NULL, NULL);
	else
		TRACE("Tab Messaging Error");
}

void CTabManager::UpdateRange( UINT tabType, double range )
{
	switch(tabType)
	{

	case SEABAT_7K:{ 
						((CDlg7KMultitab*)m_tabPages[SYS7KINDEX])->UpdateRange( range );
						break;
				   }
	case EDGE_HFSS:{
						((CDlgSSParams*)m_tabPages[HFSSINDEX])->SetCurrentRange( range );
						break;
				   }
	case EDGE_LFSS:{
						//((CDlg7KMultitab*)m_tabPages[LFSSINDEX])->SetCurrentRange( range );
						break;
				   }
	case EDGE_SBP:{
						//((CDlg7KMultitab*)m_tabPages[SBPINDEX])->
						break;
				   }
	}
}

void CTabManager::UpdatePower( UINT tabType, double power )
{
	

	switch(tabType)
	{

	case SEABAT_7K:{ 
						((CDlg7KMultitab*)m_tabPages[SYS7KINDEX])->UpdatePower( power );
						break;
				   }
	case EDGE_HFSS:{
						((CDlgSSParams*)m_tabPages[HFSSINDEX])->SetCurrentPower( power );
						break;
				   }
	case EDGE_LFSS:{
						//((CDlg7KMultitab*)m_tabPages[LFSSINDEX])->SetCurrentRange( range );
						break;
				   }
	case EDGE_SBP:{
						//((CDlg7KMultitab*)m_tabPages[SBPINDEX])->( range );
						break;
				   }
	}
}

void CTabManager::UpdatePulse( UINT tabType, double pulseWidth )
{
	((CDlg7KMultitab*)m_tabPages[SYS7KINDEX])->UpdatePulse( pulseWidth );
}

void CTabManager::UpdateMaxRate( UINT tabType,  double maxRate )
{
	((CDlg7KMultitab*)m_tabPages[SYS7KINDEX])->UpdateMaxRate( maxRate );
}

void CTabManager::UpdateGain( UINT tabType,  double gain )
{
	((CDlg7KMultitab*)m_tabPages[SYS7KINDEX])->UpdateGain( gain );
}

void CTabManager::UpdatePingState( UINT tabType, BOOL pingState )
{
	((CDlg7KMultitab*)m_tabPages[SYS7KINDEX])->UpdatePingState(pingState);
}
void CTabManager::UpdateFilters(float minRange,float maxRange,float minDepth,float maxDepth, BOOL state)
{
	((CDlg7KMultitab*)m_tabPages[SYS7KINDEX])->UpdateFilters(minRange,maxRange,minDepth,maxDepth,state);
}

void CTabManager::Init7kControlTab(	void )
{
	((CDlg7KMultitab*)m_tabPages[SYS7KINDEX])->InitControlTab();
}

