// DlgTool.cpp : implementation file
//

#include "stdafx.h"
#include "NetSdkDemo.h"
#include "DlgTool.h"
#include "NetSdkDemoDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgTool dialog


CDlgTool::CDlgTool(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgTool::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgTool)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CDlgTool::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgTool)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgTool, CDialog)
	//{{AFX_MSG_MAP(CDlgTool)
	ON_BN_CLICKED(IDC_BTN_FULLSCREEN, OnBtnFullscreen)
	ON_BN_CLICKED(IDC_CHK_SCANSIZE, OnChkScansize)
	ON_BN_CLICKED(IDC_CHK_ZOOMIN, OnChkZoomin)
	ON_BN_CLICKED(IDC_CHK_AUDIO, OnChkAudio)
	ON_BN_CLICKED(IDC_BTN_PIP1, OnBtnPip1)
	ON_BN_CLICKED(IDC_BTN_PIP4, OnBtnPip4)
	ON_BN_CLICKED(IDC_BTN_PIP6, OnBtnPip6)
	ON_BN_CLICKED(IDC_BTN_PIP8, OnBtnPip8)
	ON_BN_CLICKED(IDC_BTN_PIP9, OnBtnPip9)
	ON_BN_CLICKED(IDC_BTN_PIP16, OnBtnPip16)
	ON_WM_DESTROY()
	ON_WM_HSCROLL()
	ON_BN_CLICKED(IDC_BTN_HOME, OnBtnHome)
	ON_BN_CLICKED(IDC_BTN_PRENOSET, OnBtnPrenoset)
	ON_BN_CLICKED(IDC_BTN_PRENOCALL, OnBtnPrenocall)
	ON_BN_CLICKED(IDC_BTN_PRENOCLEAN, OnBtnPrenoclean)
	ON_BN_CLICKED(IDC_CHK_3DLOCAL, OnChk3dlocal)
	ON_CBN_SELCHANGE(IDC_CMB_AFMODESEL, OnSelchangeCmbAfmodesel)
	ON_BN_CLICKED(IDC_BTN_PIPUP, OnBtnPipup)
	ON_BN_CLICKED(IDC_BTN_PIPDOWN, OnBtnPipdown)
	//}}AFX_MSG_MAP
	ON_CONTROL_RANGE(BN_PUSHED, IDC_BTN_LEFT, IDC_BTN_RIGHTDOWN, OnPtzPush)
	ON_CONTROL_RANGE(BN_UNPUSHED, IDC_BTN_LEFT, IDC_BTN_RIGHTDOWN, OnPtzUnPush)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgTool message handlers
BOOL CDlgTool::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	int i;
	for(i=0; i<14; i++)
		m_ptzbtn[i] = new CPtzButton();
	m_ptzbtn[0]->SubclassDlgItem(IDC_BTN_ZOOM_ADD, this);
	m_ptzbtn[1]->SubclassDlgItem(IDC_BTN_ZOOM_SUB, this);
	m_ptzbtn[2]->SubclassDlgItem(IDC_BTN_FOCUS_ADD, this);
	m_ptzbtn[3]->SubclassDlgItem(IDC_BTN_FOCUS_SUB, this);
	m_ptzbtn[4]->SubclassDlgItem(IDC_BTN_IRIS_ADD, this);
	m_ptzbtn[5]->SubclassDlgItem(IDC_BTN_IRIS_SUB, this);
	
	m_ptzbtn[6]->SubclassDlgItem(IDC_BTN_LEFT, this);
	m_ptzbtn[7]->SubclassDlgItem(IDC_BTN_LEFTUP, this);
	m_ptzbtn[8]->SubclassDlgItem(IDC_BTN_LEFTDOWN, this);
	m_ptzbtn[9]->SubclassDlgItem(IDC_BTN_RIGHT, this);
	m_ptzbtn[10]->SubclassDlgItem(IDC_BTN_RIGHTUP, this);
	m_ptzbtn[11]->SubclassDlgItem(IDC_BTN_RIGHTDOWN, this);
	m_ptzbtn[12]->SubclassDlgItem(IDC_BTN_UP, this);
	m_ptzbtn[13]->SubclassDlgItem(IDC_BTN_DOWN, this);
	
	((CSliderCtrl*)GetDlgItem(IDC_SLIDER1))->SetLineSize(1);
	((CSliderCtrl*)GetDlgItem(IDC_SLIDER1))->SetPageSize(1);
	((CSliderCtrl*)GetDlgItem(IDC_SLIDER1))->SetRangeMax(100);
	((CSliderCtrl*)GetDlgItem(IDC_SLIDER1))->SetRangeMin(0);
	((CSliderCtrl*)GetDlgItem(IDC_SLIDER1))->SetPos(50);
	SetDlgItemInt(IDC_EDT_PRENO, 0);

	CString strseep;
	strseep.Format("SPEED:%d", ((CSliderCtrl*)GetDlgItem(IDC_SLIDER1))->GetPos());
	GetDlgItem(IDC_STATIC_SPEED)->SetWindowText(strseep);

	((CComboBox*)GetDlgItem(IDC_CMB_RECTYPE))->SetCurSel(0);
	((CComboBox*)GetDlgItem(IDC_CMB_AFMODESEL))->SetCurSel(0);

	((CButton*)GetDlgItem(IDC_CHK_SCANSIZE))->SetCheck(TRUE);
	//BOOL bScanSize = ((CButton*)GetDlgItem(IDC_CHK_SCANSIZE))->GetCheck();
	//((CNetSdkDemoDlg*)GetParent())->m_pLive->SetAutoScan(bScanSize);
	return TRUE;  // return TRUE unless you set the focus to a control
	// EXCEPTION: OCX Property Pages should return FALSE
}
void CDlgTool::OnDestroy() 
{
	CDialog::OnDestroy();
	
	int i;
	
	for(i=0; i<14; i++)
	{
		if(m_ptzbtn[i])
			delete m_ptzbtn[i];
		m_ptzbtn[i] = NULL;
	}
	
}
void CDlgTool::OnCancel() 
{
	//CDialog::OnCancel();
}
void CDlgTool::OnOK() 
{
	//CDialog::OnCancel();
}

void CDlgTool::OnBtnFullscreen() 
{
	((CNetSdkDemoDlg*)GetParent())->m_pLive->SetFullScreen(TRUE);
	
}

void CDlgTool::OnChkScansize() 
{
	BOOL bScanSize = ((CButton*)GetDlgItem(IDC_CHK_SCANSIZE))->GetCheck();
	((CNetSdkDemoDlg*)GetParent())->m_pLive->SetAutoScan(bScanSize);
}

void CDlgTool::OnChkZoomin() 
{
	BOOL bZoomIn = ((CButton*)GetDlgItem(IDC_CHK_ZOOMIN))->GetCheck();
	CVideoLive *pLive = ((CNetSdkDemoDlg*)GetParent())->m_pLive;
	pLive->startzoomin(bZoomIn);
}

void CDlgTool::OnChkAudio() 
{
	CLiveWndChn *pCurChn;
	CVideoLive *pLive = ((CNetSdkDemoDlg*)GetParent())->m_pLive;
	BOOL bAudio = ((CButton*)GetDlgItem(IDC_CHK_AUDIO))->GetCheck();
	pCurChn = (CLiveWndChn*)pLive->GetActivePage();
	if(pCurChn == NULL || !pCurChn->m_lHandle)
		return;
	MRNSDK_Stream_SoundPlay(pCurChn->m_lHandle, bAudio);
}

void CDlgTool::OnBtnPip1() 
{
	((CNetSdkDemoDlg*)GetParent())->m_pLive->SetSlipMode(1, 0);
}

void CDlgTool::OnBtnPip4() 
{
	((CNetSdkDemoDlg*)GetParent())->m_pLive->SetSlipMode(4, 0);
}

void CDlgTool::OnBtnPip6() 
{
	((CNetSdkDemoDlg*)GetParent())->m_pLive->SetSlipMode(6, 0);
}

void CDlgTool::OnBtnPip8() 
{
	((CNetSdkDemoDlg*)GetParent())->m_pLive->SetSlipMode(8, 0);
}

void CDlgTool::OnBtnPip9() 
{
	((CNetSdkDemoDlg*)GetParent())->m_pLive->SetSlipMode(9, 0);
}

void CDlgTool::OnBtnPip16() 
{
	((CNetSdkDemoDlg*)GetParent())->m_pLive->SetSlipMode(16, 0);
}
void CDlgTool::OnPtzPush(UINT ID)
{
	int iRet;
	int nSpeed = ((CSliderCtrl*)GetDlgItem(IDC_SLIDER1))->GetPos();
	CString szPtzCmd = "";
	CLiveWndChn *pCurChn;
	CVideoLive *pLive = ((CNetSdkDemoDlg*)GetParent())->m_pLive;
	pCurChn = (CLiveWndChn*)pLive->GetActivePage();
	if(!pCurChn->m_lHandle)
		return;
	if(ID == IDC_BTN_ZOOM_ADD)
		szPtzCmd = MR_PTZCMD_ZOOM_ADD_START;
	else if(ID == IDC_BTN_ZOOM_SUB)
		szPtzCmd = MR_PTZCMD_ZOOM_DEC_START;
	else if(ID == IDC_BTN_FOCUS_ADD)
		szPtzCmd = MR_PTZCMD_FOCUS_ADD_START;
	else if(ID == IDC_BTN_FOCUS_SUB)
		szPtzCmd = MR_PTZCMD_FOCUS_DEC_START;
	else if(ID == IDC_BTN_IRIS_ADD)
		szPtzCmd = MR_PTZCMD_IRIS_ADD_START;
	else if(ID == IDC_BTN_IRIS_SUB)
		szPtzCmd = MR_PTZCMD_IRIS_DEC_START;
	else if(ID == IDC_BTN_UP)
		szPtzCmd = MR_PTZCMD_UP_START;
	else if(ID == IDC_BTN_DOWN)
		szPtzCmd = MR_PTZCMD_DOWN_START;
	else if(ID == IDC_BTN_LEFT)
		szPtzCmd = MR_PTZCMD_LEFT_START;
	else if(ID == IDC_BTN_RIGHT)
		szPtzCmd = MR_PTZCMD_RIGHT_START;
	else if(ID == IDC_BTN_LEFTUP)
		szPtzCmd = MR_PTZCMD_LEFTUP_START;
	else if(ID == IDC_BTN_LEFTDOWN)
		szPtzCmd = MR_PTZCMD_LEFTDOWN_START;
	else if(ID == IDC_BTN_RIGHTUP)
		szPtzCmd = MR_PTZCMD_RIGHTUP_START;
	else if(ID == IDC_BTN_RIGHTDOWN)
		szPtzCmd = MR_PTZCMD_RIGHTDOWN_START;
	if(szPtzCmd.IsEmpty())
		return;
	
	iRet = MRNSDK_PtzControl(pCurChn->m_szIP, pCurChn->m_wPort, pCurChn->m_szUserName, pCurChn->m_szPassword, NULL, 1000, 0, szPtzCmd, (BYTE)nSpeed, NULL);
	TRACE("ptz cmd = %s, ret=%08X\n", szPtzCmd, iRet);
}

void CDlgTool::OnPtzUnPush(UINT ID)
{
	int iRet;
	CString szPtzCmd = "";
	CLiveWndChn *pCurChn;
	CVideoLive *pLive = ((CNetSdkDemoDlg*)GetParent())->m_pLive;
	pCurChn = (CLiveWndChn*)pLive->GetActivePage();
	if(!pCurChn->m_lHandle)
		return;
	if(ID == IDC_BTN_ZOOM_ADD)
		szPtzCmd = MR_PTZCMD_ZOOM_ADD_STOP;
	else if(ID == IDC_BTN_ZOOM_SUB)
		szPtzCmd = MR_PTZCMD_ZOOM_DEC_STOP;
	else if(ID == IDC_BTN_FOCUS_ADD)
		szPtzCmd = MR_PTZCMD_FOCUS_ADD_STOP;
	else if(ID == IDC_BTN_FOCUS_SUB)
		szPtzCmd = MR_PTZCMD_FOCUS_DEC_STOP;
	else if(ID == IDC_BTN_IRIS_ADD)
		szPtzCmd = MR_PTZCMD_IRIS_ADD_STOP;
	else if(ID == IDC_BTN_IRIS_SUB)
		szPtzCmd = MR_PTZCMD_IRIS_DEC_STOP;
	else if(ID == IDC_BTN_UP)
		szPtzCmd = MR_PTZCMD_UP_STOP;
	else if(ID == IDC_BTN_DOWN)
		szPtzCmd = MR_PTZCMD_DOWN_STOP;
	else if(ID == IDC_BTN_LEFT)
		szPtzCmd = MR_PTZCMD_LEFT_STOP;
	else if(ID == IDC_BTN_RIGHT)
		szPtzCmd = MR_PTZCMD_RIGHT_STOP;
	else if(ID == IDC_BTN_LEFTUP)
		szPtzCmd = MR_PTZCMD_LEFTUP_STOP;
	else if(ID == IDC_BTN_LEFTDOWN)
		szPtzCmd = MR_PTZCMD_LEFTDOWN_STOP;
	else if(ID == IDC_BTN_RIGHTUP)
		szPtzCmd = MR_PTZCMD_RIGHTUP_STOP;
	else if(ID == IDC_BTN_RIGHTDOWN)
		szPtzCmd = MR_PTZCMD_RIGHTDOWN_STOP;
	if(szPtzCmd.IsEmpty())
		return;
	
	iRet = MRNSDK_PtzControl(pCurChn->m_szIP, pCurChn->m_wPort, pCurChn->m_szUserName, pCurChn->m_szPassword, NULL, 1000, 0, szPtzCmd, 0, NULL);
	TRACE("ptz cmd = %s, ret=%08X\n", szPtzCmd, iRet);
}

void CDlgTool::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	if(nSBCode != SB_ENDSCROLL)
	{
		if(GetDlgItem(IDC_SLIDER1) == pScrollBar)
		{
			CString strseep;
			strseep.Format("SPEED:%d", ((CSliderCtrl*)pScrollBar)->GetPos());
			GetDlgItem(IDC_STATIC_SPEED)->SetWindowText(strseep);
		}
	}
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CDlgTool::OnBtnHome() 
{
	CLiveWndChn *pCurChn;
	CVideoLive *pLive = ((CNetSdkDemoDlg*)GetParent())->m_pLive;
	pCurChn = (CLiveWndChn*)pLive->GetActivePage();
	if(!pCurChn->m_lHandle)
		return;
	MRNSDK_PtzControl(pCurChn->m_szIP, pCurChn->m_wPort, pCurChn->m_szUserName, pCurChn->m_szPassword, NULL, 1000, 0, MR_PTZCMD_GO_HOME, 0, NULL);
}

void CDlgTool::OnBtnPrenoset() 
{
	CLiveWndChn *pCurChn;
	CVideoLive *pLive = ((CNetSdkDemoDlg*)GetParent())->m_pLive;
	pCurChn = (CLiveWndChn*)pLive->GetActivePage();
	if(!pCurChn->m_lHandle)
		return;
	BYTE byPreNo = (BYTE)GetDlgItemInt(IDC_EDT_PRENO);
	MRNSDK_PtzControl(pCurChn->m_szIP, pCurChn->m_wPort, pCurChn->m_szUserName, pCurChn->m_szPassword, NULL,  1000, 0, MR_PTZCMD_PRESET_SET, byPreNo, NULL);
}

void CDlgTool::OnBtnPrenocall() 
{
	CLiveWndChn *pCurChn;
	CVideoLive *pLive = ((CNetSdkDemoDlg*)GetParent())->m_pLive;
	pCurChn = (CLiveWndChn*)pLive->GetActivePage();
	if(!pCurChn->m_lHandle)
		return;
	BYTE byPreNo = (BYTE)GetDlgItemInt(IDC_EDT_PRENO);
	MRNSDK_PtzControl(pCurChn->m_szIP, pCurChn->m_wPort, pCurChn->m_szUserName, pCurChn->m_szPassword, NULL,  1000, 0, MR_PTZCMD_PRESET_CALL, byPreNo, NULL);
}

void CDlgTool::OnBtnPrenoclean() 
{
	CLiveWndChn *pCurChn;
	CVideoLive *pLive = ((CNetSdkDemoDlg*)GetParent())->m_pLive;
	pCurChn = (CLiveWndChn*)pLive->GetActivePage();
	if(!pCurChn->m_lHandle)
		return;
	BYTE byPreNo = (BYTE)GetDlgItemInt(IDC_EDT_PRENO);
	MRNSDK_PtzControl(pCurChn->m_szIP, pCurChn->m_wPort, pCurChn->m_szUserName, pCurChn->m_szPassword, NULL,  1000, 0, MR_PTZCMD_PRESET_CLEAN, byPreNo, NULL);
}

void CDlgTool::OnChk3dlocal() 
{
	//MR_PTZ3DLOCAL_T st3DLocal;
	CLiveWndChn *pCurChn;
	CVideoLive *pLive = ((CNetSdkDemoDlg*)GetParent())->m_pLive;
	pCurChn = (CLiveWndChn*)pLive->GetActivePage();
	if(!pCurChn->m_lHandle)
	{
		((CButton*)GetDlgItem(IDC_CHK_3DLOCAL))->SetCheck(FALSE);
		return;
	}
	pCurChn->m_b3DLocal = ((CButton*)GetDlgItem(IDC_CHK_3DLOCAL))->GetCheck();
	//MRNSDK_PtzControl(pCurChn->m_szIP, pCurChn->m_wPort, pCurChn->m_szUserName, pCurChn->m_szPassword, NULL, 1000, 0, MR_PTZCMD_GO_HOME, 0, NULL);
}

void CDlgTool::OnSelchangeCmbAfmodesel() 
{
	int nSel;
	unsigned char byAfMode;
	CLiveWndChn *pCurChn;
	CVideoLive *pLive = ((CNetSdkDemoDlg*)GetParent())->m_pLive;
	pCurChn = (CLiveWndChn*)pLive->GetActivePage();
	if(!pCurChn->m_lHandle)
		return;
	nSel = ((CComboBox*)GetDlgItem(IDC_CMB_AFMODESEL))->GetCurSel();
	if(nSel == 0)
		byAfMode = MRCONFC_AFMODE_AUTO;
	else if(nSel == 1)
		byAfMode = MRCONFC_AFMODE_ONEPUSH;
	else 
		byAfMode = MRCONFC_AFMODE_MANUAL;
	MRNSDK_PtzControl(pCurChn->m_szIP, pCurChn->m_wPort, pCurChn->m_szUserName, pCurChn->m_szPassword, NULL,  1000, 0, MR_PTZCMD_AFMODE, byAfMode, NULL);
}

void CDlgTool::OnBtnPipup() 
{
	int nCurMode  = ((CNetSdkDemoDlg*)GetParent())->m_pLive->m_nCurViewMode;
	int nCurStart = ((CNetSdkDemoDlg*)GetParent())->m_pLive->m_nCurStartChn;
	if((nCurStart - nCurMode) >= 0)
	{
		((CNetSdkDemoDlg*)GetParent())->m_pLive->SetSlipMode(nCurMode, nCurStart - nCurMode);
	}
}

void CDlgTool::OnBtnPipdown() 
{
	int nCurMode  = ((CNetSdkDemoDlg*)GetParent())->m_pLive->m_nCurViewMode;
	int nCurStart = ((CNetSdkDemoDlg*)GetParent())->m_pLive->m_nCurStartChn;
	if((nCurStart + nCurMode) < VCHN_MAX)
	{
		((CNetSdkDemoDlg*)GetParent())->m_pLive->SetSlipMode(nCurMode, nCurStart + nCurMode);
	}
}
