📄 rightvod.cpp
字号:
// RightVOD.cpp : implementation file
//
#include "stdafx.h"
#include "..\dvrmanager.h"
#include "net.h"
#include "ip_port.h"
#include "RightVOD.h"
#include "RightLogin.h"
#include "../utils/common.h"
#include "../video/video_channel.h"
#include "../utils/update_data.h"
#include "vector"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRightVOD dialog
CString add_comma(DWORD x, TCHAR comma = _T(','))
{
std::vector<TCHAR> a;
DWORD y = x;
int k=0;
for( int i=0; y; i++ )
{
if( k && (((k+1) % 4) == 0) )
{
a.push_back(comma);
k++;
}
// else
// {
a.push_back(_T('0')+(y%10));
y/=10;
k++;
// }
}
a.push_back(_T('\0'));
CString xx = &a[0];
xx.MakeReverse();
return xx;
}
//##ModelId=3F90BAAA0306
CRightVOD* CRightVOD::self = NULL;
//##ModelId=3F90BAAA033F
CRightVOD* CRightVOD::the_one() {return self;}
//##ModelId=3F90BAAA0335
CRightVOD::CRightVOD(CWnd* pParent /*=NULL*/)
: baseclass(CRightVOD::IDD, pParent)
{
//{{AFX_DATA_INIT(CRightVOD)
m_channel = -1;
m_which = -1;
m_timerec = TRUE;
m_handrec = TRUE;
m_motionrec = TRUE;
m_alarmrec = TRUE;
//m_type=-1;
m_starttime = CTime::GetCurrentTime();
//}}AFX_DATA_INIT
ZeroMemory(&opt1, sizeof(opt1));
ZeroMemory(&opt2, sizeof(opt2));
ZeroMemory(&opt3, sizeof(opt3));
ZeroMemory(&opt4, sizeof(opt4));
for(int i=0;i<16;i++)
vod_opened[i]=false;
self = this;
}
//##ModelId=3F90BAAB0124
void CRightVOD::DoDataExchange(CDataExchange* pDX)
{
baseclass::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRightVOD)
DDX_Control(pDX, ID_S, m_s);
DDX_Control(pDX, IDBTN_FRAME, m_btn_frame);
DDX_Control(pDX, ID_DATE, m_startdate);
DDX_Control(pDX, IDBTN_STOP, m_btn_stop);
DDX_Control(pDX, IDBTN_PLAY, m_btn_play);
DDX_Control(pDX, IDBTN_PAUSE, m_btn_pause);
DDX_Control(pDX, IDBTN_FF, m_btn_ff);
DDX_Control(pDX, IDBTN_FB, m_btn_fb);
DDX_Control(pDX, ID_7, m_7);
DDX_Control(pDX, IDLST_FILES, m_files);
DDX_Control(pDX, IDLST_DATE, m_date);
DDX_Control(pDX, IDCB_WHICH, m_cbwhich);
DDX_Control(pDX, IDCB_CHANNEL, m_cbchannel);
DDX_Control(pDX, IDBTN_REFRESH, m_btn_refresh);
DDX_Control(pDX, ID_TITLE, m_title);
DDX_Check(pDX, IDC_TIMEREC_CHECK, m_timerec);
DDX_Check(pDX, IDC_HANDREC_CHECK, m_handrec);
DDX_Check(pDX, IDC_MOTIONREC_CHECK, m_motionrec);
DDX_Check(pDX, IDC_ALARMREC_CHECK, m_alarmrec);
DDX_Control(pDX, IDC_TIMEREC_CHECK, m_timerec_ctl);
DDX_Control(pDX, IDC_HANDREC_CHECK, m_handrec_ctl);
DDX_Control(pDX, IDC_MOTIONREC_CHECK, m_motionrec_ctl);
DDX_Control(pDX, IDC_ALARMREC_CHECK, m_alarmrec_ctl);
DDX_Control(pDX, ID_4, m_4);
DDX_Control(pDX, ID_3, m_3);
DDX_Control(pDX, ID_2, m_2);
DDX_Control(pDX, ID_1, m_1);
DDX_CBIndex(pDX, IDCB_CHANNEL, m_channel);
DDX_CBIndex(pDX, IDCB_WHICH, m_which);
//DDX_CBIndex(pDX, IDCB_TYPE, m_type);
DDX_DateTimeCtrl(pDX, IDTIME_START, m_starttime);
DDX_Control(pDX, IDTAB_VOD, m_tabctrl);
//}}AFX_DATA_MAP
CString str;
m_cbwhich.GetWindowText(str);
video_channel* p = video_channel::current_sel();
UINT ids[] = {IDCB_CHANNEL, IDLST_DATE, IDLST_FILES};
for( int i=0; i<SIZE_OF(ids); i++ )
{
GetDlgItem(ids[i])->EnableWindow(!str.IsEmpty() && !vod_opened[p->index()] );
GetDlgItem(ids[i])->EnableWindow(!str.IsEmpty());
}
//m_cbwhich.EnableWindow(!vod_opened[p->index()]);
m_cbchannel.GetWindowText(str);
GetDlgItem(IDBTN_REFRESH)->EnableWindow(!str.IsEmpty());
// GetDlgItem(IDTAB_VOD)->EnableWindow(!str.IsEmpty());
bool pause_enable = false;
if( vod_opened[p->index()] )
pause_enable = true;
if( paused() )
pause_enable = false;
VOD_SPEED vs = get_vod_speed();
// m_btn_play.EnableWindow(vs!= VS_PLAYx1);
m_btn_pause.EnableWindow(pause_enable);
int idx = m_files.GetCurSel();
UINT ids1[] = {IDTIME_START};//, IDBTN_PLAY};
for( i=0; i<SIZE_OF(ids1); i++ )
{
GetDlgItem(ids1[i])->EnableWindow(m_files.GetCurSel()!=-1);
}
m_btn_pause.EnableWindow(vod_opened[p->index()]);
m_btn_stop.EnableWindow(vod_opened[p->index()]);
m_btn_ff.EnableWindow(vod_opened[p->index()]);
m_btn_fb.EnableWindow(vod_opened[p->index()]);
m_btn_frame.EnableWindow(vod_opened[p->index()]);
m_btn_pause.EnableWindow(pause_enable);
GetDlgItem(IDTIME_START)->EnableWindow(!vod_opened[p->index()]);
GetDlgItem(IDBTN_REFRESH)->EnableWindow(!vod_opened[p->index()]);
GetDlgItem(IDTIME_START)->EnableWindow(true);
GetDlgItem(IDBTN_REFRESH)->EnableWindow(true);
#define CASE(x, y) case VS_##x: y.SetWindowText(IDString(IDS_##x)); break;
if( vod_opened[p->index()] )
{
VOD_SPEED vs = get_vod_speed();
restore_default_btn_text();
switch(vs)
{
CASE(PLAYx1, m_btn_play);
CASE(PLAYx2, m_btn_play);
CASE(PLAYx3, m_btn_play);
CASE(FFx1, m_btn_ff);
CASE(FFx2, m_btn_ff);
CASE(FFx3, m_btn_ff);
CASE(FFx4, m_btn_ff);
CASE(FBx1, m_btn_fb);
CASE(FBx2, m_btn_fb);
CASE(FBx3, m_btn_fb);
CASE(FBx4, m_btn_fb);
}
}
}
void CRightVOD::restore_default_btn_text()
{
m_btn_ff.SetWindowText(IDString(IDS_FFx1));
m_btn_play.SetWindowText(IDString(IDS_PLAYx1));
m_btn_fb.SetWindowText(IDString(IDS_FBx1));
}
BEGIN_MESSAGE_MAP(CRightVOD, baseclass)
//{{AFX_MSG_MAP(CRightVOD)
ON_CBN_SELCHANGE(IDCB_WHICH, OnSelchangeWhich)
ON_CBN_SELCHANGE(IDCB_CHANNEL, OnSelchangeChannel)
ON_BN_CLICKED(IDBTN_REFRESH, OnRefresh)
ON_LBN_SELCHANGE(IDLST_DATE, OnDate)
ON_BN_CLICKED(IDBTN_PLAY, OnPlay)
ON_BN_CLICKED(IDBTN_PAUSE, OnPause)
ON_BN_CLICKED(IDBTN_STOP, OnStop)
ON_BN_CLICKED(IDBTN_FF, OnFf)
ON_BN_CLICKED(IDBTN_FB, OnFb)
ON_LBN_SELCHANGE(IDLST_FILES, OnFiles)
ON_BN_CLICKED(IDBTN_FRAME, OnFrame)
ON_BN_CLICKED(IDC_TIMEREC_CHECK, Onupdatefile)
ON_BN_CLICKED(IDC_HANDREC_CHECK, Onupdatefile)
ON_BN_CLICKED(IDC_MOTIONREC_CHECK, Onupdatefile)
ON_BN_CLICKED(IDC_ALARMREC_CHECK, Onupdatefile)
ON_NOTIFY(TCN_SELCHANGE, IDTAB_VOD, OnSelchangeVod)
ON_WM_TIMER()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_UPDATE_DATA, on_update_data)
ON_MESSAGE(WM_OPEN_VOD, on_vod_opened)
ON_MESSAGE(WM_CLOSE_VOD, on_vod_closed)
ON_MESSAGE(WM_SET_VOD_SPEED, on_vod_set_speed)
MSG2(NTM_OPT_GET_OK, on_get_ok)
MSG2(WM_LOGGED_OUT, on_logged_out)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRightVOD message handlers
//##ModelId=3F90BAAB01BA
BOOL CRightVOD::OnInitDialog()
{
baseclass::OnInitDialog();
init_label(m_1);
init_label(m_3);
init_label(m_4);
//init_label(m_5);
init_label(m_startdate);
init_title(m_title);
CString str;
str.LoadString(IDS_REC_DATA);
m_tabctrl.InsertItem(0,str);
str.LoadString(IDS_BACK_DATA);
m_tabctrl.InsertItem(1,str);
CSize size(1,15);
m_tabctrl.SetItemSize(size);
// GetDlgItem(IDTAB_VOD)->ShowWindow(SW_SHOW);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//##ModelId=3F90BAAA02E5
CString CRightVOD::get_alias()
{
CString alias;
UpdateData();
if( m_which == -1 )
return alias;
m_cbwhich.GetLBText(m_which, alias);
return alias;
}
//##ModelId=3F90BAAB01CE
void CRightVOD::OnSelchangeWhich()
{
GET_ALIAS;
fill_combo_chnls(alias, &m_cbchannel);
m_channel = 0;
//m_type=0;
UpdateData(FALSE);
OnRefresh();
}
//##ModelId=3F90BAAB01D8
void CRightVOD::OnSelchangeChannel()
{
UpdateData();
OnRefresh();
}
//##ModelId=3F90BAAA02B5
void CRightVOD::on_join()
{
m_cbwhich.ResetContent();
fill_combo(&m_cbwhich);
m_cbchannel.EnableWindow(FALSE);
}
//##ModelId=3F90BAAA02BE
void CRightVOD::on_leave()
{
// m_cbwhich.ResetContent();
// m_cbchannel.ResetContent();
// m_date.ResetContent();
// m_files.ResetContent();
}
//void CRightVOD::on_get_ok(DWORD ip, USHORT port, NET_OPTIONS no, void* stuff)
MSG3(on_get_ok, CRightVOD)
{
NET_OPTIONS no = (NET_OPTIONS)w;
void* stuff = (void*)l;
if( no == OPT_VOD_DATE )
{
ZeroMemory(&opt1, sizeof(opt1));
TREC_DATELIST* d = (TREC_DATELIST*)stuff;
memcpy(&opt1, stuff, 1+d->num*sizeof(TREC_DATE));
PostMessage(WM_UPDATE_DATA, FALSE, OPT_VOD_DATE);
}
if( no == OPT_VOD_FILE )
{
ZeroMemory(&opt2, sizeof(opt2));
TREC_FILESEGLIST* f = (TREC_FILESEGLIST*)stuff;
memcpy(&opt2, stuff, 5+f->num*sizeof(TREC_FILESEG));
PostMessage(WM_UPDATE_DATA, FALSE, OPT_VOD_FILE);
}
if( no == OPT_VOD_DATE_EXT )
{
ZeroMemory(&opt3, sizeof(opt3));
TREC_DATELIST_EXT* d = (TREC_DATELIST_EXT*)stuff;
memcpy(&opt3, stuff, 2+d->num*sizeof(TREC_DATE));
PostMessage(WM_UPDATE_DATA, FALSE, OPT_VOD_DATE_EXT);
}
if( no == OPT_VOD_FILE_EXT )
{
ZeroMemory(&opt4, sizeof(opt4));
TREC_FILESEGLIST_EXT* f = (TREC_FILESEGLIST_EXT*)stuff;
memcpy(&opt4, stuff, 6+f->num*sizeof(TREC_FILESEG));
PostMessage(WM_UPDATE_DATA, FALSE, OPT_VOD_FILE_EXT);
}
if( no == OPT_VOD_END )
info_balloon(IDS_VOD_END);
return 0;
}
//##ModelId=3F90BAAB01F6
void CRightVOD::OnRefresh()
{
m_date.ResetContent();
GET_ALIAS;
int index = m_tabctrl.GetCurSel();
switch(index) {
case 0:
get_net_opt(alias, OPT_VOD_DATE, m_channel, m_hWnd);
break;
case 1:
get_net_opt(alias, OPT_VOD_DATE, m_channel+100, m_hWnd);
break;
default: ;
}
}
const LPCTSTR date_format = _T("%04d-%02d-%02d");
const LPCTSTR file_format = _T("%02d:%02d:%02d ~ %02d:%02d:%02d @ %s Kb");
static LPCTSTR FMTERROR = _T("Format of date data from remote machine is invalid!");
void save_log(LPCTSTR logfile, void* data, int size)
{
FILE* fp = fopen(logfile, "wb");
if( !fp )
return;
fwrite(data, size, 1, fp);
fclose(fp);
}
//##ModelId=3F90BAAB0142
LRESULT CRightVOD::on_update_data(WPARAM w, LPARAM l)
{
if( w == FALSE )
{
if( l == OPT_VOD_DATE || l == OPT_VOD_DATE_EXT)
{
int allnum = 0;
void *pdate = NULL;
if(l == OPT_VOD_DATE)
{
allnum = opt1.num;
pdate = &opt1;
}
if(l == OPT_VOD_DATE_EXT)
{
allnum = opt3.num;
pdate = &opt3;
}
//m_date.SetRedraw(FALSE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -