📄 addschedlg.cpp
字号:
// AddScheDlg.cpp : implementation file
//
#include "stdafx.h"
#include "LiveController.h"
#include "AddScheDlg.h"
#include "VidSelectDlg.h"
#include "Schedule.h"
#include "SetBlack.h"
#include "SetWrite.h"
#include "FilteredWord.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAddScheDlg dialog
CAddScheDlg::CAddScheDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAddScheDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CAddScheDlg)
m_strScheName = _T("");
m_strScheDesc = _T("");
m_strPlayItemName = _T("");
m_nPlayRepeatCount = 1;
m_nPlayBeginTime = 0;
m_bIsIndefinite = FALSE;
//}}AFX_DATA_INIT
m_pNewAddedSche = new CSchedule();
m_pDBInterface = NULL;
m_bIsUpdate = FALSE;
}
void CAddScheDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAddScheDlg)
DDX_Control(pDX, IDC_STOP_TIME, m_ctrStopTime);
DDX_Control(pDX, IDC_STOP_DATE, m_ctrStopDate);
DDX_Control(pDX, IDC_START_TIME, m_ctrStartTime);
DDX_Control(pDX, IDC_START_DATE, m_ctrStartDate);
DDX_Control(pDX, IDC_COMBO_CHANNEL, m_ctrScheChannel);
DDX_Control(pDX, IDC_COMBO_TYPE, m_ctrScheType);
DDX_Control(pDX, IDC_PLAY_LIST, m_ctrPlayList);
DDX_Text(pDX, IDC_EDIT_NAME, m_strScheName);
DDV_MaxChars(pDX, m_strScheName, 100);
DDX_Text(pDX, IDC_EDIT_DESC, m_strScheDesc);
DDV_MaxChars(pDX, m_strScheDesc, 1000);
DDX_Text(pDX, IDC_EDIT_PLAYITEM, m_strPlayItemName);
DDX_Text(pDX, IDC_EDIT_RP_COUNT, m_nPlayRepeatCount);
DDX_Text(pDX, IDC_EDIT_BEGIN, m_nPlayBeginTime);
DDX_Check(pDX, IDC_CHECK_INDEFINITE, m_bIsIndefinite);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAddScheDlg, CDialog)
//{{AFX_MSG_MAP(CAddScheDlg)
ON_BN_CLICKED(IDC_BN_BROWSE, OnBnSelectVidsrc)
ON_BN_CLICKED(IDC_BN_ITEM_ADD, OnBnItemAdd)
ON_BN_CLICKED(IDC_BN_ITEM_DEL, OnBnItemDel)
ON_BN_CLICKED(IDOK, OnBnScheAdd)
ON_NOTIFY(NM_CLICK, IDC_PLAY_LIST, OnClickPlayList)
ON_BN_CLICKED(IDC_CHECK_INDEFINITE, OnCheckIndefinite)
ON_BN_CLICKED(IDC_Black, OnBlack)
ON_BN_CLICKED(IDC_Write, OnWrite)
ON_BN_CLICKED(IDC_CHECK_WordList, OnCHECKWordList)
ON_BN_CLICKED(IDC_BN_SetBlack, OnBNSetBlack)
ON_BN_CLICKED(IDC_BN_SetWrite, OnBNSetWrite)
ON_BN_CLICKED(IDC_BN_SetWordList, OnBNSetWordList)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CAddScheDlg::GetScheChannelsFromDB()
{
if ( m_pDBInterface == NULL ) {
return;
}
CChannel *pChannels = m_pDBInterface->GetChannels();
if ( pChannels == NULL ) {
return;
}
CString strTemp;
int nIndex = 0;
while ( pChannels )
{
strTemp.Format( " %d", pChannels->m_nChannelPort );
strTemp = pChannels->m_strChannelIP + strTemp;
nIndex = m_ctrScheChannel.AddString(strTemp);
m_ctrScheChannel.SetItemDataPtr( nIndex, pChannels );
pChannels = pChannels->m_pNext;
}
m_ctrScheChannel.SetCurSel(0);
}
void CAddScheDlg::SetUpdateSche( CSchedule *pSche )
{
ASSERT(pSche);
m_pNewAddedSche->Assign(pSche);
m_bIsUpdate = TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CAddScheDlg message handlers
void CAddScheDlg::OnBnSelectVidsrc()
{
if ( m_pDBInterface == NULL ) {
return;
}
CPlayItem *pItems = m_pDBInterface->GetVidSrcs();
if ( pItems == NULL ) {
return;
}
CVidSelectDlg dlg;
dlg.SetVidSrcs( pItems );
if ( dlg.DoModal() == IDOK )
{
UpdateData();
CPlayItem *pBack = NULL;
do {
if ( pItems->m_nVidSrcID == dlg.m_nSelectedID )
{
m_pCurSelectedVid = pItems;
m_strPlayItemName = m_pCurSelectedVid->m_strSourceName;
pItems = pItems->m_pNext;
m_pCurSelectedVid->m_pNext = NULL;
}
else
{
pBack = pItems;
pItems = pItems->m_pNext;
delete pBack;
}
} while(pItems);
UpdateData(FALSE);
ResetVidControls(TRUE);
}
}
void CAddScheDlg::OnBnItemAdd()
{
if ( m_pCurSelectedVid == NULL ) {
return;
}
UpdateData();
m_pCurSelectedVid->m_nPlayOpt = PLAY_OPT_TIMER_DRIVED;
m_pCurSelectedVid->m_nPlayValue = m_nPlayBeginTime;
if ( m_bIsIndefinite ) {
m_pCurSelectedVid->m_nRepeatCount = 0;
}
else {
m_pCurSelectedVid->m_nRepeatCount = m_nPlayRepeatCount;
}
m_pNewAddedSche->AddPlayItem( m_pCurSelectedVid );
RefreshPlayList();
ResetVidControls(FALSE);
}
void CAddScheDlg::OnBnItemDel()
{
if ( m_pNewAddedSche == NULL || m_nSelectedPlayItemIndex < 0 ) {
return;
}
int nSelectedPlayItemID = m_ctrPlayList.GetItemData( m_nSelectedPlayItemIndex );
if ( m_pNewAddedSche->DelPlayItem( nSelectedPlayItemID ) ) {
RefreshPlayList();
GetDlgItem(IDC_BN_ITEM_DEL)->EnableWindow(FALSE);
if ( m_nSelectedPlayItemIndex >= m_ctrPlayList.GetItemCount() ) {
m_nSelectedPlayItemIndex = m_ctrPlayList.GetItemCount()-1;
}
if ( m_nSelectedPlayItemIndex >= 0 ) {
DWORD dwFlag = LVIS_SELECTED|LVIS_FOCUSED;
m_ctrPlayList.SetItemState( m_nSelectedPlayItemIndex, dwFlag, dwFlag );
GetDlgItem(IDC_BN_ITEM_DEL)->EnableWindow(TRUE);
}
}
}
void CAddScheDlg::ResetVidControls( BOOL bEnable )
{
UpdateData();
if ( bEnable == FALSE )
{
m_pCurSelectedVid = NULL;
m_strPlayItemName.Empty();
m_nPlayRepeatCount = 1;
m_nPlayBeginTime = 0;
UpdateData(FALSE);
}
if ( bEnable == FALSE ) {
GetDlgItem(IDC_EDIT_RP_COUNT)->EnableWindow(FALSE);
}
else
{
if ( m_bIsIndefinite ) {
GetDlgItem(IDC_EDIT_RP_COUNT)->EnableWindow(FALSE);
}
else
if ( bEnable ) {
GetDlgItem(IDC_EDIT_RP_COUNT)->EnableWindow(TRUE);
}
}
GetDlgItem(IDC_EDIT_BEGIN)->EnableWindow(bEnable);
GetDlgItem(IDC_BN_ITEM_ADD)->EnableWindow(bEnable);
GetDlgItem(IDC_CHECK_INDEFINITE)->EnableWindow(bEnable);
}
void CAddScheDlg::RefreshPlayList()
{
if ( m_pNewAddedSche == NULL ) {
return;
}
int nIndex = 0;
CString strTemp;
LVITEM tempLvi;
tempLvi.mask = LVIF_IMAGE | LVIF_TEXT;
tempLvi.stateMask = -1;
////???////
CPlayItem *pItem =m_pNewAddedSche->m_pSeqPlayList_H;
/////???///
int nItemCount = m_ctrPlayList.GetItemCount();
while ( pItem )
{
tempLvi.iItem = nIndex;
tempLvi.iSubItem = 0;
strTemp.Format( "%d", pItem->m_nPlayItemID );
tempLvi.pszText = (char *)(LPCTSTR)(strTemp);
if ( nIndex >= nItemCount ) {
m_ctrPlayList.InsertItem(&tempLvi);
}
else {
m_ctrPlayList.SetItem(&tempLvi);
}
// Vidsrc Name
tempLvi.iSubItem = 1;
tempLvi.pszText = (char *)(LPCTSTR)(pItem->m_strSourceName);
m_ctrPlayList.SetItem( &tempLvi );
// Vidsrc Type
tempLvi.iSubItem = 2;
strTemp.Format( "%d", pItem->m_nVidSrcType );
tempLvi.pszText = (char *)(LPCTSTR)strTemp;
m_ctrPlayList.SetItem( &tempLvi );
m_ctrPlayList.SetItem( &tempLvi );
m_ctrPlayList.SetItemData( nIndex, pItem->m_nPlayItemID );
pItem = pItem->m_pNext;
nIndex++;
}
for ( ; nIndex < nItemCount; nIndex++ )
{
m_ctrPlayList.DeleteItem(nIndex);
}
}
BOOL CAddScheDlg::OnInitDialog()
{
CDialog::OnInitDialog();
LVCOLUMN lvcol;
lvcol.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT;
lvcol.fmt = LVCFMT_LEFT;
lvcol.pszText = _T( "序号" );
lvcol.iSubItem = 1;
m_ctrPlayList.InsertColumn( 0, &lvcol );
m_ctrPlayList.SetColumnWidth( 0, 50 );
lvcol.pszText = _T( "源名称" );
m_ctrPlayList.InsertColumn( 1, &lvcol );
m_ctrPlayList.SetColumnWidth( 1, 150 );
lvcol.pszText = _T( "类型" );
m_ctrPlayList.InsertColumn( 2, &lvcol );
m_ctrPlayList.SetColumnWidth( 2, 50 );
DWORD dwStyle = m_ctrPlayList.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;
dwStyle |= LVS_EX_GRIDLINES;
m_ctrPlayList.SetExtendedStyle(dwStyle);
GetScheChannelsFromDB();
////设置下拉列表的内容
int nIndex = m_ctrScheType.AddString(SCHE_TYPE_STREAM_WITH_MSG_STR);
m_ctrScheType.SetItemData( nIndex, SCHE_TYPE_STREAM_WITH_MSG );
nIndex = m_ctrScheType.AddString(SCHE_TYPE_STREAM_ONLY_STR);
m_ctrScheType.SetItemData( nIndex, SCHE_TYPE_STREAM_ONLY );
m_ctrScheType.SetCurSel(0);
m_nSelectedPlayItemIndex = -1;//////////////////////////////////////
if ( m_bIsUpdate && m_pNewAddedSche )
{
m_strScheName = m_pNewAddedSche->m_strName;
m_strScheDesc = m_pNewAddedSche->m_strDesc;
m_ctrStartTime.SetTime( &(m_pNewAddedSche->m_nStartime) );
m_ctrStopTime.SetTime( &(m_pNewAddedSche->m_nStoptime) );
if ( m_pNewAddedSche->m_nScheType == SCHE_TYPE_STREAM_WITH_MSG ) {
m_ctrScheType.SelectString(0, SCHE_TYPE_STREAM_WITH_MSG_STR);
}
else
if ( m_pNewAddedSche->m_nScheType == SCHE_TYPE_STREAM_ONLY ) {
m_ctrScheType.SelectString(0, SCHE_TYPE_STREAM_ONLY_STR);
}
CString strTemp;
strTemp.Format( "%s %d",
(LPCTSTR)(m_pNewAddedSche->m_strMCastIP), m_pNewAddedSche->m_nMCastPort );
m_ctrScheChannel.SelectString(0, strTemp);
GetDlgItem(IDOK)->SetWindowText("Update Sche");
SetWindowText("Update Sche");
UpdateData(FALSE);
}
GetDlgItem(IDC_BN_SetBlack)->EnableWindow(FALSE);
GetDlgItem(IDC_BN_SetWrite)->EnableWindow(FALSE);
GetDlgItem(IDC_BN_SetWordList)->EnableWindow(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CAddScheDlg::OnClickPlayList(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMITEMACTIVATE pNmitem = (LPNMITEMACTIVATE)pNMHDR;
UINT uFlags;
m_nSelectedPlayItemIndex = m_ctrPlayList.HitTest( CPoint(pNmitem->ptAction), &uFlags );
if ( m_nSelectedPlayItemIndex < 0 )
{
GetDlgItem(IDC_BN_ITEM_DEL)->EnableWindow(FALSE);
*pResult = 0;
return;
}
GetDlgItem(IDC_BN_ITEM_DEL)->EnableWindow(TRUE);
*pResult = 0;
}
void CAddScheDlg::OnBnScheAdd()
{
UpdateData();
if ( m_strScheName.IsEmpty() )
{
MessageBox( "Please input the schedule name", "System Tip" );
GetDlgItem(IDC_EDIT_NAME)->SetFocus();
return;
}
CTime st, et;
m_ctrStartTime.GetTime(st);
m_ctrStopTime.GetTime(et);
if ( st >= et )
{
MessageBox( "Please check if the play-time setting is correct", "System Tip" );
return;
}
CTime nowtime = CTime::GetCurrentTime();
if ( et <= nowtime )
{
MessageBox( "Please check if the stop-time setting is out of date", "System Tip" );
return;
}
if ( st <= nowtime )
{
if ( MessageBox( "The sche setting seems to be started, are you sure to contiue?",
"System Tip", MB_YESNO ) == IDNO ) {
return;
}
}
CChannel *pChannel =
(CChannel*)(m_ctrScheChannel.GetItemDataPtr( m_ctrScheChannel.GetCurSel() ));
if ( pChannel == NULL ) {
return;
}
m_pNewAddedSche->m_nScheType = m_ctrScheType.GetItemData( m_ctrScheType.GetCurSel() );
m_pNewAddedSche->m_strMCastIP = pChannel->m_strChannelIP;
m_pNewAddedSche->m_nMCastPort = pChannel->m_nChannelPort;
m_pNewAddedSche->m_nStartime = st;
m_pNewAddedSche->m_nStoptime = et;
m_pNewAddedSche->m_strName = m_strScheName;
m_pNewAddedSche->m_strDesc = m_strScheDesc;
m_pNewAddedSche->m_nLastUpdate = 1;
m_pNewAddedSche->m_nPlayState = SCHE_PLAY_STATE_NOTDEF;
m_pNewAddedSche->m_nScheID = 0;
int nCount = m_ctrScheChannel.GetCount(); //获得下拉条目的总个数
for ( int i=0; i<nCount; i++ )
{
pChannel = (CChannel*)(m_ctrScheChannel.GetItemDataPtr(i));
if ( pChannel ) {
delete pChannel;
}
}
CDialog::OnOK();
}
void CAddScheDlg::OnCheckIndefinite()
{
UpdateData();
if ( m_bIsIndefinite ) {
GetDlgItem(IDC_EDIT_RP_COUNT)->EnableWindow(FALSE);
}
else {
GetDlgItem(IDC_EDIT_RP_COUNT)->EnableWindow(TRUE);
}
}
void CAddScheDlg::OnBlack()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_BN_SetBlack)->EnableWindow(TRUE);
GetDlgItem(IDC_BN_SetWrite)->EnableWindow(FALSE);
}
void CAddScheDlg::OnWrite()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_BN_SetWrite)->EnableWindow(TRUE);
GetDlgItem(IDC_BN_SetBlack)->EnableWindow(FALSE);
}
void CAddScheDlg::OnCHECKWordList()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_BN_SetWordList)->EnableWindow(TRUE);
}
void CAddScheDlg::OnBNSetBlack()
{
// TODO: Add your control notification handler code here
CSetBlack dlg;
if (dlg.DoModal() == IDC_BN_InUse)
{
m_pNewAddedSche->m_pSetNameList_H = dlg.m_pSetBlackName_H;
m_pNewAddedSche->m_pSetNameList_T = dlg.m_pSetBlackName_T;
}
}
void CAddScheDlg::OnBNSetWrite()
{
// TODO: Add your control notification handler code here
CSetWrite dlg;
if (dlg.DoModal() == IDC_BN_InUse)
{
m_pNewAddedSche->m_pSetNameList_H = dlg.m_pSetWhiteName_H;
m_pNewAddedSche->m_pSetNameList_T = dlg.m_pSetWhiteName_T;
}
}
void CAddScheDlg::OnBNSetWordList()
{
// TODO: Add your control notification handler code here
CFilteredWord dlg;
////////////取得设置好的节目过滤词汇表///////////////////////////
if (dlg.DoModal() == IDC_BN_Use)
{
m_pNewAddedSche->m_pSetWordList_H = dlg.m_pWordListHead;
m_pNewAddedSche->m_pSetWordList_T = dlg.m_pWordListTail;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -