📄 viewschedlg.cpp
字号:
// ViewScheDlg.cpp : implementation file
//
#include "stdafx.h"
#include "LiveController.h"
#include "ViewScheDlg.h"
#include "NameListShow.h"
#include "WordListShow.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CViewScheDlg dialog
CViewScheDlg::CViewScheDlg(CWnd* pParent /*=NULL*/)
: CDialog(CViewScheDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CViewScheDlg)
m_strChannel = _T("");
m_strDesc = _T("");
m_strStopTime = _T("");
m_strName = _T("");
m_strStartTime = _T("");
m_strPlayState = _T("");
//}}AFX_DATA_INIT
m_pWorkingSche = NULL;
m_PlayImage.Create( IDB_BITMAP1, 16, 1, RGB(255,255,255) );
m_pStreamServer = NULL;
}
void CViewScheDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CViewScheDlg)
DDX_Control(pDX, IDC_PLAY_LIST, m_ctrPlayList);
DDX_Text(pDX, IDC_EDIT_CHANNEL, m_strChannel);
DDX_Text(pDX, IDC_EDIT_DESC, m_strDesc);
DDX_Text(pDX, IDC_EDIT_ET, m_strStopTime);
DDX_Text(pDX, IDC_EDIT_NAME, m_strName);
DDX_Text(pDX, IDC_EDIT_ST, m_strStartTime);
DDX_Text(pDX, IDC_EDIT_STATE, m_strPlayState);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CViewScheDlg, CDialog)
//{{AFX_MSG_MAP(CViewScheDlg)
ON_BN_CLICKED(IDC_BTN_AUTO, OnBtnAuto)
ON_BN_CLICKED(IDC_BTN_SWITCH, OnBtnSwitch)
ON_BN_CLICKED(IDC_BTN_INSERT, OnBtnInsert)
ON_NOTIFY(NM_CLICK, IDC_PLAY_LIST, OnClickPlayList)
ON_BN_CLICKED(IDC_BN_NameListShow, OnBNNameListShow)
ON_BN_CLICKED(IDC_BN_WordListShow, OnBNWordListShow)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CViewScheDlg message handlers
void CViewScheDlg::OnBtnSwitch()
{
POSITION pos = m_ctrPlayList.GetFirstSelectedItemPosition();
if (pos)
{
int nIndex = m_ctrPlayList.GetNextSelectedItem( pos );
DWORD nSelectedPlayID = m_ctrPlayList.GetItemData(nIndex);
CPlayItem *pItem = m_pWorkingSche->m_pSeqPlayList_H;
while ( pItem )
{
if ( pItem->m_nPlayItemID == (int)nSelectedPlayID ) {
break;
}
pItem = pItem->m_pNext;
}
if ( pItem && m_pStreamServer )
{
// Send Play item switch
m_pStreamServer->SendStreamCtrl( OPERATION_START,
m_pWorkingSche->m_nScheID, pItem->m_nPlayItemID );
GetDlgItem(IDC_BTN_SWITCH)->EnableWindow(FALSE);
}
}
}
void CViewScheDlg::OnBtnAuto()
{
// Send Play item switch
m_pStreamServer->SendStreamCtrl( OPERATION_START, m_pWorkingSche->m_nScheID, 0 );
GetDlgItem(IDC_BTN_AUTO)->EnableWindow(FALSE);
}
void CViewScheDlg::OnBtnInsert()
{
// TODO: Add your control notification handler code here
}
void CViewScheDlg::OnClickPlayList(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMITEMACTIVATE pNmitem = (LPNMITEMACTIVATE)pNMHDR;
UINT uFlags;
int nIndex = m_ctrPlayList.HitTest( CPoint(pNmitem->ptAction), &uFlags );
if ( nIndex < 0 )
{
GetDlgItem(IDC_BTN_SWITCH)->EnableWindow(FALSE);
*pResult = 0;
return;
}
GetDlgItem(IDC_BTN_SWITCH)->EnableWindow(TRUE);
*pResult = 0;
}
BOOL CViewScheDlg::OnInitDialog()
{
CDialog::OnInitDialog();
if ( m_pWorkingSche == NULL ) {
return FALSE;
}
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, 180 );
lvcol.pszText = _T( "类型" );
m_ctrPlayList.InsertColumn( 2, &lvcol );
m_ctrPlayList.SetColumnWidth( 2, 50 );
lvcol.pszText = _T( "开始点" );
m_ctrPlayList.InsertColumn( 3, &lvcol );
m_ctrPlayList.SetColumnWidth( 3, 60 );
lvcol.pszText = _T( "重复" );
m_ctrPlayList.InsertColumn( 4, &lvcol );
m_ctrPlayList.SetColumnWidth( 4, 50 );
lvcol.pszText = _T( "路径" );
m_ctrPlayList.InsertColumn( 5, &lvcol );
m_ctrPlayList.SetColumnWidth( 5, 230 );
DWORD dwStyle = m_ctrPlayList.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;
dwStyle |= LVS_EX_GRIDLINES;
m_ctrPlayList.SetExtendedStyle(dwStyle);
m_ctrPlayList.SetImageList( &m_PlayImage, LVSIL_SMALL );
RefreshPlayList(m_pWorkingSche->m_nScheID);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CViewScheDlg::SetWorkingSche( CSchedule *pSche )
{
m_pWorkingSche = pSche;
if ( pSche == NULL ) {
return FALSE;
}
m_strName = m_pWorkingSche->m_strName;
m_strDesc = m_pWorkingSche->m_strDesc;
m_strStartTime = m_pWorkingSche->m_nStartime.Format("%Y-%m-%d %H:%M:%S");
m_strStopTime = m_pWorkingSche->m_nStoptime.Format("%Y-%m-%d %H:%M:%S");
// PlayState
if ( pSche->m_nPlayState == SCHE_PLAY_STATE_WAITING )
m_strPlayState = "等待播出";
else
if ( pSche->m_nPlayState == SCHE_PLAY_STATE_PLAYING )
m_strPlayState = "正在播出";
else
if ( pSche->m_nPlayState == SCHE_PLAY_STATE_OVER )
m_strPlayState = "已经结束";
else m_strPlayState = "未定义";
m_strChannel.Format( "%s %d", (LPCTSTR)(m_pWorkingSche->m_strMCastIP),
m_pWorkingSche->m_nMCastPort );
return TRUE;
}
void CViewScheDlg::RefreshPlayList( DWORD nScheID )
{
if ( !IsWindow(GetSafeHwnd()) || !m_pWorkingSche ||
m_pWorkingSche->m_nScheID != nScheID ) {
return;
}
int nIndex = 0;
CString strTemp;
LVITEM tempLvi;
tempLvi.mask = LVIF_IMAGE | LVIF_TEXT;
tempLvi.stateMask = -1;
CPlayItem *pItem = m_pWorkingSche->m_pSeqPlayList_H;
int nItemCount = m_ctrPlayList.GetItemCount();
while ( pItem )
{
tempLvi.iItem = nIndex;
tempLvi.iSubItem = 0;
if ( pItem->m_nPlayItemID == m_pWorkingSche->m_nCurPlayItem ) {
tempLvi.iImage = 0;
}
else tempLvi.iImage = 1;
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 );
// begin
tempLvi.iSubItem = 3;
strTemp.Format( "%d秒", pItem->m_nPlayValue );
tempLvi.pszText = (char *)(LPCTSTR)strTemp;
m_ctrPlayList.SetItem( &tempLvi );
// repeat count
tempLvi.iSubItem = 4;
if ( pItem->m_nRepeatCount > 0 ) {
strTemp.Format( "%d次", pItem->m_nRepeatCount );
}
else {
strTemp = "无限";
}
tempLvi.pszText = (char *)(LPCTSTR)strTemp;
m_ctrPlayList.SetItem( &tempLvi );
// Vidsrc Path
tempLvi.iSubItem = 5;
tempLvi.pszText = (char *)(LPCTSTR)(pItem->m_strSourcePath);
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);
}
}
void CViewScheDlg::RefreshScheState( DWORD nScheID )
{
if ( !IsWindow(GetSafeHwnd()) || !m_pWorkingSche ||
m_pWorkingSche->m_nScheID != nScheID ) {
return;
}
// PlayState
if ( m_pWorkingSche->m_nPlayState == SCHE_PLAY_STATE_WAITING )
m_strPlayState = "等待播出";
else
if ( m_pWorkingSche->m_nPlayState == SCHE_PLAY_STATE_PLAYING )
m_strPlayState = "正在播出";
else
if ( m_pWorkingSche->m_nPlayState == SCHE_PLAY_STATE_OVER )
m_strPlayState = "已经结束";
else m_strPlayState = "未定义";
UpdateData(FALSE);
}
void CViewScheDlg::OnBNNameListShow()
{
// TODO: Add your control notification handler code here
CNameListShow dlg;
dlg.WorkingSche_ID = m_pWorkingSche->m_nScheID;
dlg.m_pdbInterface = & m_DBInterface;
dlg.DoModal();
}
void CViewScheDlg::OnBNWordListShow()
{
// TODO: Add your control notification handler code here
CWordListShow dlg;
dlg.WorkingSche_ID = m_pWorkingSche->m_nScheID;
dlg.pInterface = &m_DBInterface;
dlg.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -