⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addschedlg.cpp

📁 视频播放控制器程序
💻 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 + -