/*
* $Id$
*
* (C) 2006-2010 see AUTHORS
*
* This file is part of mplayerc.
*
* Mplayerc is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* Mplayerc is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
#include "stdafx.h"
#include "mplayerc.h"
#include "mainfrm.h"
#include "PlayerNavigationDialog.h"
#include "../../DSUtil/DSUtil.h"
#include
// CPlayerNavigationDialog dialog
// IMPLEMENT_DYNAMIC(CPlayerNavigationDialog, CResizableDialog)
CPlayerNavigationDialog::CPlayerNavigationDialog()
: CResizableDialog(CPlayerNavigationDialog::IDD, NULL)
{
}
CPlayerNavigationDialog::~CPlayerNavigationDialog()
{
}
BOOL CPlayerNavigationDialog::Create(CWnd* pParent)
{
if(!__super::Create(IDD, pParent))
return FALSE;
m_pParent = pParent;
return TRUE;
}
void CPlayerNavigationDialog::DoDataExchange(CDataExchange* pDX)
{
__super::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LISTCHANNELS, m_ChannelList);
DDX_Control(pDX, IDC_NAVIGATION_AUDIO, m_ComboAudio);
DDX_Control(pDX, IDC_NAVIGATION_INFO, m_ButtonInfo);
DDX_Control(pDX, IDC_NAVIGATION_SCAN, m_ButtonScan);
}
BOOL CPlayerNavigationDialog::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam == VK_RETURN)
{
CWnd* pFocused = GetFocus();
UNUSED_ALWAYS(pFocused);
}
}
return __super::PreTranslateMessage(pMsg);
}
BEGIN_MESSAGE_MAP(CPlayerNavigationDialog, CResizableDialog)
ON_WM_DESTROY()
ON_LBN_SELCHANGE(IDC_LISTCHANNELS, OnChangeChannel)
ON_CBN_SELCHANGE(IDC_NAVIGATION_AUDIO, OnSelChangeComboAudio)
ON_BN_CLICKED (IDC_NAVIGATION_INFO, OnButtonInfo)
ON_BN_CLICKED(IDC_NAVIGATION_SCAN, OnTunerScan)
END_MESSAGE_MAP()
// CPlayerNavigationDialog message handlers
BOOL CPlayerNavigationDialog::OnInitDialog()
{
__super::OnInitDialog();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPlayerNavigationDialog::OnDestroy()
{
m_ChannelList.ResetContent();
__super::OnDestroy();
}
void CPlayerNavigationDialog::OnChangeChannel()
{
CWnd* TempWnd;
int nItem;
TempWnd = static_cast (m_pParent) -> m_pParent;
nItem = p_nItems[m_ChannelList.GetCurSel()] + ID_NAVIGATE_CHAP_SUBITEM_START;
static_cast (TempWnd) -> OnNavigateChapters(nItem);
SetupAudioSwitcherSubMenu();
}
void CPlayerNavigationDialog::SetupAudioSwitcherSubMenu(CDVBChannel* pChannel)
{
bool bFound = FALSE;
int nCurrentChannel;
AppSettings& s = AfxGetAppSettings();
if (!pChannel)
{
nCurrentChannel = s.DVBLastChannel;
POSITION pos = s.DVBChannels.GetHeadPosition();
while (pos && !bFound)
{
pChannel = &s.DVBChannels.GetNext(pos);
if (nCurrentChannel == pChannel->GetPrefNumber())
{
bFound = TRUE;
break;
}
}
}
m_ComboAudio.ResetContent();
for (int i=0; i < pChannel->GetAudioCount(); i++)
{
m_ComboAudio.AddString(pChannel->GetAudio(i)->Language);
m_audios[i].PID = pChannel->GetAudio(i)-> PID;
m_audios[i].Type = pChannel->GetAudio(i)->Type;
m_audios[i].PesType = pChannel->GetAudio(i) -> PesType;
m_audios[i].Language = pChannel->GetAudio(i) -> Language;
}
m_ComboAudio.SetCurSel(0); // TODO: managing default languages
}
void CPlayerNavigationDialog::UpdateElementList()
{
int nItem;
int nCurrentChannel;
AppSettings& s = AfxGetAppSettings();
if (s.iDefaultCaptureDevice == 1)
{
m_ChannelList.ResetContent();
nCurrentChannel = s.DVBLastChannel;
POSITION pos = s.DVBChannels.GetHeadPosition();
while (pos)
{
CDVBChannel& Channel = s.DVBChannels.GetNext(pos);
nItem = m_ChannelList.AddString (Channel.GetName());
if (nItem < MAX_CHANNELS_ALLOWED)
p_nItems [nItem] = Channel.GetPrefNumber();
if (nCurrentChannel == Channel.GetPrefNumber())
{
m_ChannelList.SetCurSel(nItem);
SetupAudioSwitcherSubMenu(&Channel);
}
}
}
}
void CPlayerNavigationDialog::UpdatePos(int nID)
{
for (int i=0; i < MAX_CHANNELS_ALLOWED; i++)
{
if (p_nItems [i] == nID)
{
m_ChannelList.SetCurSel(i);
break;
}
}
}
void CPlayerNavigationDialog::OnTunerScan()
{
CWnd* TempWnd;
TempWnd = static_cast (m_pParent) -> m_pParent;
static_cast (TempWnd) -> OnTunerScan();
UpdateElementList();
}
void CPlayerNavigationDialog::OnSelChangeComboAudio()
{
UINT nID;
CWnd* TempWnd;
nID = m_ComboAudio.GetCurSel() + ID_NAVIGATE_AUDIO_SUBITEM_START;
TempWnd = static_cast (m_pParent) -> m_pParent;
static_cast (TempWnd) -> OnNavigateAudio(nID);
}
void CPlayerNavigationDialog::OnButtonInfo()
{
// TODO: Retrieve and show channel info
}