/* * $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 . * */ // TunerScanDlg.cpp : implementation file // #include "stdafx.h" #include "mplayerc.h" #include "MainFrm.h" #include "TunerScanDlg.h" #include "DVBChannel.h" enum TSC_COLUMN { TSCC_NUMBER, TSCC_NAME, TSCC_FREQUENCY, TSCC_ENCRYPTED, TSCC_CHANNEL }; // CTunerScanDlg dialog IMPLEMENT_DYNAMIC(CTunerScanDlg, CDialog) CTunerScanDlg::CTunerScanDlg(CWnd* pParent /*=NULL*/) : CDialog(CTunerScanDlg::IDD, pParent) , m_bInProgress(false) { AppSettings& s = AfxGetAppSettings(); m_ulFrequencyStart = s.iBDAScanFreqStart; m_ulFrequencyEnd = s.iBDAScanFreqEnd; m_ulBandwidth = s.iBDABandwidth*1000; m_bUseOffset = s.fBDAUseOffset; m_lOffset = s.iBDAOffset; m_bIgnoreEncryptedChannels = s.fBDAIgnoreEncryptedChannels; } CTunerScanDlg::~CTunerScanDlg() { } BOOL CTunerScanDlg::OnInitDialog() { CDialog::OnInitDialog(); m_OffsetEditBox.EnableWindow(m_bUseOffset); m_ChannelList.InsertColumn(TSCC_NUMBER, ResStr(IDS_DVB_CHANNEL_NUMBER), LVCFMT_LEFT, 50); m_ChannelList.InsertColumn(TSCC_NAME, ResStr(IDS_DVB_CHANNEL_NAME), LVCFMT_LEFT, 250); m_ChannelList.InsertColumn(TSCC_FREQUENCY, ResStr(IDS_DVB_CHANNEL_FREQUENCY), LVCFMT_LEFT, 100); m_ChannelList.InsertColumn(TSCC_ENCRYPTED, ResStr(IDS_DVB_CHANNEL_ENCRYPTION), LVCFMT_LEFT, 80); m_ChannelList.InsertColumn(TSCC_CHANNEL, _T("Channel"), LVCFMT_LEFT, 0); m_Progress.SetRange(0, 100); m_Strength.SetRange(0, 100); m_Quality.SetRange(0, 100); m_btnSave.EnableWindow(FALSE); return TRUE; } void CTunerScanDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_FREQ_START, m_ulFrequencyStart); DDX_Text(pDX, IDC_FREQ_END, m_ulFrequencyEnd); DDX_Text(pDX, IDC_BANDWIDTH, m_ulBandwidth); DDX_Text(pDX, IDC_OFFSET, m_lOffset); DDX_Check(pDX, IDC_CHECK_OFFSET, m_bUseOffset); DDX_Check(pDX, IDC_CHECK_IGNORE_ENCRYPTED, m_bIgnoreEncryptedChannels); DDX_Control(pDX, IDC_PROGRESS, m_Progress); DDX_Control(pDX, IDC_STRENGTH, m_Strength); DDX_Control(pDX, IDC_QUALITY, m_Quality); DDX_Control(pDX, IDC_CHANNEL_LIST, m_ChannelList); DDX_Control(pDX, ID_START, m_btnStart); DDX_Control(pDX, ID_SAVE, m_btnSave); DDX_Control(pDX, IDCANCEL, m_btnCancel); DDX_Control(pDX, IDC_OFFSET, m_OffsetEditBox); } BEGIN_MESSAGE_MAP(CTunerScanDlg, CDialog) ON_MESSAGE(WM_TUNER_SCAN_PROGRESS, OnScanProgress) ON_MESSAGE(WM_TUNER_SCAN_END, OnScanEnd) ON_MESSAGE(WM_TUNER_STATS, OnStats) ON_MESSAGE(WM_TUNER_NEW_CHANNEL, OnNewChannel) ON_BN_CLICKED(ID_SAVE, &CTunerScanDlg::OnBnClickedSave) ON_BN_CLICKED(ID_START, &CTunerScanDlg::OnBnClickedStart) ON_BN_CLICKED(IDCANCEL, &CTunerScanDlg::OnBnClickedCancel) ON_BN_CLICKED(IDC_CHECK_OFFSET, &CTunerScanDlg::OnBnClickedCheckOffset) END_MESSAGE_MAP() // CTunerScanDlg message handlers void CTunerScanDlg::OnBnClickedSave() { AppSettings& s = AfxGetAppSettings(); s.m_DVBChannels.RemoveAll(); for (int i=0; i pTSD (DNew TunerScanData); pTSD->Hwnd = m_hWnd; pTSD->FrequencyStart = m_ulFrequencyStart; pTSD->FrequencyStop = m_ulFrequencyEnd; pTSD->Bandwidth = m_ulBandwidth; pTSD->Offset = m_bUseOffset ? m_lOffset : 0; SaveScanSettings(); m_ChannelList.DeleteAllItems(); ((CMainFrame*)AfxGetMainWnd())->StartTunerScan (pTSD); SetProgress (true); } else { ((CMainFrame*)AfxGetMainWnd())->StopTunerScan(); } } void CTunerScanDlg::OnBnClickedCancel() { if (m_bInProgress) { ((CMainFrame*)AfxGetMainWnd())->StopTunerScan(); } OnCancel(); } void CTunerScanDlg::OnBnClickedCheckOffset() { UpdateData(true); m_OffsetEditBox.EnableWindow(m_bUseOffset); } LRESULT CTunerScanDlg::OnScanProgress(WPARAM wParam, LPARAM lParam) { m_Progress.SetPos(wParam); return TRUE; } LRESULT CTunerScanDlg::OnScanEnd(WPARAM wParam, LPARAM lParam) { SetProgress (false); return TRUE; } LRESULT CTunerScanDlg::OnStats(WPARAM wParam, LPARAM lParam) { m_Strength.SetPos ((int)wParam); m_Quality.SetPos ((int)lParam); return TRUE; } LRESULT CTunerScanDlg::OnNewChannel(WPARAM wParam, LPARAM lParam) { CDVBChannel Channel; CString strTemp; int nItem; int nChannelNumber; Channel.FromString ((LPCTSTR) lParam); if (!m_bIgnoreEncryptedChannels || !Channel.IsEncrypted()) { if (Channel.GetOriginNumber() != 0) { // LCN is available nChannelNumber = Channel.GetOriginNumber(); // Insert new channel so that channels are sorted by their logical number for (nItem=0; nItem nChannelNumber) { break; } } } else { nChannelNumber = nItem = m_ChannelList.GetItemCount(); } strTemp.Format(_T("%d"), nChannelNumber); nItem = m_ChannelList.InsertItem (nItem, strTemp); m_ChannelList.SetItemData (nItem, Channel.GetOriginNumber()); m_ChannelList.SetItemText (nItem, TSCC_NAME, Channel.GetName()); strTemp.Format(_T("%d"), Channel.GetFrequency()); m_ChannelList.SetItemText (nItem, TSCC_FREQUENCY, strTemp); strTemp = Channel.IsEncrypted() ? ResStr(IDS_DVB_CHANNEL_ENCRYPTED) : ResStr(IDS_DVB_CHANNEL_NOT_ENCRYPTED); m_ChannelList.SetItemText (nItem, TSCC_ENCRYPTED, strTemp); m_ChannelList.SetItemText (nItem, TSCC_CHANNEL, (LPCTSTR) lParam); } return TRUE; } void CTunerScanDlg::SetProgress (bool bState) { if (bState) { m_btnStart.SetWindowTextW(_T("Stop")); m_btnSave.EnableWindow(FALSE); } else { m_btnStart.SetWindowTextW(_T("Start")); m_Progress.SetPos (0); m_btnSave.EnableWindow(TRUE); } m_bInProgress = bState; } void CTunerScanDlg::SaveScanSettings() { AppSettings& s = AfxGetAppSettings(); s.iBDAScanFreqStart = m_ulFrequencyStart; s.iBDAScanFreqEnd = m_ulFrequencyEnd; div_t bdw = div(m_ulBandwidth, 1000); s.iBDABandwidth = bdw.quot; s.fBDAUseOffset = m_bUseOffset; s.iBDAOffset = m_lOffset; s.fBDAIgnoreEncryptedChannels = m_bIgnoreEncryptedChannels; }