// DlgCfgAudio.cpp : implementation file
//

#include "stdafx.h"
#include "NetSdkDemo.h"
#include "DlgCfgAudio.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgCfgAudio dialog
static const char *szCodecList[] = {
	"PCM",		// MR_ACODEC_PCM	0
	"ADPCM",	// MR_ACODEC_ADPCM  1
	"G711A",	// MR_ACODEC_G711A	2
	"G711U",	// MR_ACODEC_G711U	3
	"G722",		// MR_ACODEC_G722	4
	"G726",		// MR_ACODEC_G726	5
	"MP3",		// MR_ACODEC_MP3	6
	"AAC",		// MR_ACODEC_AAC	7
	"AMR",		// MR_ACODEC_AMR	8
	"AMR_WB",	// MR_ACODEC_AMR_WB	9
	"G723",		// MR_ACODEC_G723	10
	"G729",		// MR_ACODEC_G729	11
};

static const char *szSampleRate[] = {
	"16000",	// 0
	"32000",	// 1
	"44100",	// 2
	"48000",	// 3
};

CDlgCfgAudio::CDlgCfgAudio(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgCfgAudio::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgCfgAudio)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_bGetParam = FALSE;
}


void CDlgCfgAudio::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgCfgAudio)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgCfgAudio, CDialog)
	//{{AFX_MSG_MAP(CDlgCfgAudio)
	ON_BN_CLICKED(IDC_BTN_SAVE, OnBtnSave)
	ON_BN_CLICKED(IDC_CHK_AUDIO, OnChkAudio)
	ON_WM_HSCROLL()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgCfgAudio message handlers
BOOL CDlgCfgAudio::GetEnvParam()
{
	int i, iRet;
	CString szText;
	//if(m_bGetParam)
	//	return TRUE;
	iRet = librmconfc_env_get(g_envDev.szIP, g_envDev.wPort, g_envDev.szUserName, g_envDev.szPassword, NULL,
		MRCONFC_ENVCMD_AUDIO, sizeof(MRCONFC_AUDIO_CFG), &m_stAudio);
	if(iRet)
	{
		AfxMessageBox("获得参数失败!");
		return FALSE;
	}
	((CComboBox*)GetDlgItem(IDC_CMB_CODEC))->ResetContent();
	for(i=0; i<m_stAudio.nAudioCodecNums; i++)
	{
		((CComboBox*)GetDlgItem(IDC_CMB_CODEC))->AddString(szCodecList[m_stAudio.byAudioCodecList[i]]);
		((CComboBox*)GetDlgItem(IDC_CMB_CODEC))->SetItemData(((CComboBox*)GetDlgItem(IDC_CMB_CODEC))->GetCount() - 1, m_stAudio.byAudioCodecList[i]);
	}
	
	((CButton*)GetDlgItem(IDC_CHK_AUDIO))->SetCheck(m_stAudio.bEnable);
	SetDlgItemInt(IDC_EDT_BITRATE, m_stAudio.nBitRate);

	((CComboBox*)GetDlgItem(IDC_CMB_CODEC))->SetCurSel(0);
	for(i=0; i<((CComboBox*)GetDlgItem(IDC_CMB_CODEC))->GetCount(); i++)
	{
		if(((CComboBox*)GetDlgItem(IDC_CMB_CODEC))->GetItemData(i) == m_stAudio.nAEncType)
		{
			((CComboBox*)GetDlgItem(IDC_CMB_CODEC))->SetCurSel(i);
			break;
		}
	}

	if(m_stAudio.nSampleRate == 16000)
		((CComboBox*)GetDlgItem(IDC_CMB_SAMPLERATE))->SetCurSel(0);
	else if(m_stAudio.nSampleRate == 32000)
		((CComboBox*)GetDlgItem(IDC_CMB_SAMPLERATE))->SetCurSel(1);
	else if(m_stAudio.nSampleRate == 44100)
		((CComboBox*)GetDlgItem(IDC_CMB_SAMPLERATE))->SetCurSel(2);
	else if(m_stAudio.nSampleRate == 48000)
		((CComboBox*)GetDlgItem(IDC_CMB_SAMPLERATE))->SetCurSel(3);

	((CComboBox*)GetDlgItem(IDC_CMB_SAMPLEBITS))->SetCurSel(0);
	((CComboBox*)GetDlgItem(IDC_CMB_CHANNELS))->SetCurSel(m_stAudio.nChannel == 1 ? 0 : 1);
	
	((CSliderCtrl*)GetDlgItem(IDC_SLD_VOLUE))->SetPos(m_stAudio.nInpVolume);
	szText.Format("%d", m_stAudio.nInpVolume);
	GetDlgItem(IDC_STC_VOLUE)->SetWindowText(szText);


	OnChkAudio();
	m_bGetParam = TRUE;
	return TRUE;
}

void CDlgCfgAudio::OnBtnSave() 
{
	int iRet;
	int nSel;

	if(!m_bGetParam)
		return;
	if(!UpdateData())
		return;

	m_stAudio.bEnable = ((CButton*)GetDlgItem(IDC_CHK_AUDIO))->GetCheck();

	m_stAudio.nAEncType = ((CComboBox*)GetDlgItem(IDC_CMB_CODEC))->GetItemData(((CComboBox*)GetDlgItem(IDC_CMB_CODEC))->GetCurSel());

	nSel = ((CComboBox*)GetDlgItem(IDC_CMB_SAMPLERATE))->GetCurSel();
	if(nSel == 0)
		m_stAudio.nSampleRate = 16000;
	else if(nSel == 1)
		m_stAudio.nSampleRate = 32000;
	else if(nSel == 2)
		m_stAudio.nSampleRate = 44100;
	else if(nSel == 3)
		m_stAudio.nSampleRate = 48000;

	m_stAudio.nBitRate = GetDlgItemInt(IDC_EDT_BITRATE);

	m_stAudio.nInpVolume = ((CSliderCtrl*)GetDlgItem(IDC_SLD_VOLUE))->GetPos();
	m_stAudio.nChannel   = ((CComboBox*)GetDlgItem(IDC_CMB_CHANNELS))->GetCurSel() + 1;

	iRet = librmconfc_env_set(g_envDev.szIP, g_envDev.wPort, g_envDev.szUserName, g_envDev.szPassword, NULL,
			MRCONFC_ENVCMD_AUDIO, sizeof(MRCONFC_AUDIO_CFG), &m_stAudio);
	if(iRet)
	{
		AfxMessageBox("保持参数失败!");
		return;
	}
}

void CDlgCfgAudio::OnChkAudio() 
{
	BOOL bEnable = ((CButton*)GetDlgItem(IDC_CHK_AUDIO))->GetCheck();
	GetDlgItem(IDC_CMB_CODEC)->EnableWindow(bEnable);
	GetDlgItem(IDC_CMB_SAMPLERATE)->EnableWindow(bEnable);
	GetDlgItem(IDC_CMB_SAMPLEBITS)->EnableWindow(bEnable);
	GetDlgItem(IDC_EDT_BITRATE)->EnableWindow(bEnable);
	GetDlgItem(IDC_CMB_CHANNELS)->EnableWindow(bEnable);
}

void CDlgCfgAudio::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_SLD_VOLUE) == pScrollBar)
		{
			CString strseep;
			strseep.Format("%d", ((CSliderCtrl*)pScrollBar)->GetPos());
			GetDlgItem(IDC_STC_VOLUE)->SetWindowText(strseep);
		}
	}
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

BOOL CDlgCfgAudio::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	((CSliderCtrl*)GetDlgItem(IDC_SLD_VOLUE))->SetLineSize(1);
	((CSliderCtrl*)GetDlgItem(IDC_SLD_VOLUE))->SetPageSize(1);
	((CSliderCtrl*)GetDlgItem(IDC_SLD_VOLUE))->SetRangeMax(10);
	((CSliderCtrl*)GetDlgItem(IDC_SLD_VOLUE))->SetRangeMin(1);
	((CSliderCtrl*)GetDlgItem(IDC_SLD_VOLUE))->SetPos(5);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
