#include "cmotion.h"
|
#include "publicfuc.h"
|
#include <QMessageBox>
|
#include <new>
|
|
CMotion::CMotion(QWidget *parent)
|
: QDialog(parent)
|
{
|
ui.setupUi(this);
|
|
m_lUserID = -1;
|
//***ÉèÖÃtable***//
|
//ÉèÖõ¥Ôª¸ñ¸öÊý
|
ui.tableMotion->setRowCount(KIT_MOTION_HEIGHT);
|
ui.tableMotion->setColumnCount(KIT_MOTION_WIDTH);
|
//ÉèÖõ¥Ôª¸ñÄÚÈÝ
|
int i, j;
|
for(i = 0; i < KIT_MOTION_HEIGHT; i++)
|
{
|
for(j = 0; j < KIT_MOTION_WIDTH; j++)
|
{
|
ui.tableMotion->setCellWidget(i, j, &(m_checkMotionScope[i][j]));
|
}
|
}
|
//ÉèÖõ¥Ôª¸ñ´óС
|
for(j = 0; j < KIT_MOTION_HEIGHT; j++)
|
{
|
ui.tableMotion->setColumnWidth(j, 30);
|
}
|
|
//¼ÓÈëʱ¼ä±à¼¿ò
|
for(i = 0; i < MAX_TIMESEGMENT_V30; i++)
|
{
|
ui.vLayStartHour->addWidget(&(m_editStartHour[i]));
|
ui.vLayStartMin->addWidget(&(m_editStartMin[i]));
|
ui.vLayEndHour->addWidget(&(m_editEndHour[i]));
|
ui.vLayEndMin->addWidget(&(m_editEndMin[i]));
|
}
|
|
for(i = 0; i < MAX_ALARMOUT_V30; i++)
|
{
|
m_pcheckAlarmOut[i] = NULL;
|
}
|
|
ui.tableChannel->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
|
ui.tableAlarmOut->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
|
|
m_pstruMotion = NULL;
|
m_iAlarmOutNum = 0;
|
m_iArryChannel = NULL;
|
m_iStartChannelNo = 0;
|
|
//ÁéÃô¶È
|
QStringList list;
|
list <<"0"<<"1"<<"2"<<"3"<<"4"<<"5"<<"close";
|
ui.comboMotionSensitive->addItems(list);
|
|
//¾«¶È
|
list.clear();
|
list<<"16*16"<<"32*32"<<"64*64";
|
ui.comboPrecision->addItems(list);
|
|
//ÈÕÆÚ
|
list.clear();
|
list<<"Monday"<<"Tuesday"<<"Wednesday"<<"Thursday"<<"Friday"<<"Saturday"<<"Sunday";
|
ui.comboWeekDay->addItems(list);
|
|
connect(ui.comboWeekDay, SIGNAL(activated(int)), this, SLOT(comboWeekDayChanged(int)));
|
connect(ui.checkbo08, SIGNAL(clicked()), this, SLOT(checkAlarmOut()));
|
}
|
|
CMotion::~CMotion()
|
{
|
|
}
|
|
//ÉèÖÿؼþÖеÄÖµ
|
int CMotion::setEachWidgetValue()
|
{
|
//ÓÐ×¢ÊÍ//
|
/*
|
if(NULL == m_pstruMotion || NULL == m_iArryChannel)
|
{
|
return HPR_ERROR;
|
}
|
createChannelCheck(); //ͨµÀ±í¸ñÖиù¾Ýʵ¼ÊͨµÀÊý¼ÓÈëcheckbox
|
createAlarmOutCheck(); //ÔÚ±¨¾¯Êä³ö±í¸ñÖмÓÈëcheckbox
|
|
//չʾÒÑÓÐÒÆ¶¯Õì²âÇøÓò
|
int i, j;
|
for(i = 0; i < KIT_MOTION_HEIGHT; i++)
|
{
|
for(j = 0; j < KIT_MOTION_WIDTH; j++)
|
{
|
if(m_pstruMotion->byMotionScope[i][j] == 0)
|
{
|
m_checkMotionScope[i][j].setChecked(FALSE);
|
}
|
else
|
{
|
m_checkMotionScope[i][j].setChecked(TRUE);
|
}
|
}
|
}
|
|
//ÒÆ¶¯Õì²âÁéÃô¶È
|
if(m_pstruMotion->byMotionSensitive <= 5 //*&& m_pstruMotion->byMotionSensitive >= 0//)
|
{
|
ui.comboMotionSensitive->setCurrentIndex(m_pstruMotion->byMotionSensitive);
|
}
|
else
|
{
|
ui.comboMotionSensitive->setCurrentIndex(6);//¹Ø±Õ
|
}
|
|
//Ëã·¨¾«¶È
|
if(m_pstruMotion->byPrecision <= 2 )
|
{
|
ui.comboPrecision->setCurrentIndex(m_pstruMotion->byPrecision);
|
}
|
|
//±¨¾¯´¦Àí·½Ê½
|
setMotionAlarmTypeWidget();
|
//²¼·Àʱ¼ä
|
comboWeekDayChanged(0);
|
//±¨¾¯´¥·¢µÄ¼ÏñͨµÀ
|
for(i = 0; i < MAX_CHANNUM_V30; i++)
|
{
|
if(m_pstruMotion->byRelRecordChan[i] == 1)
|
{
|
m_checkChannel[i].setChecked(TRUE);
|
}
|
else
|
{
|
m_checkChannel[i].setChecked(FALSE);
|
}
|
}
|
|
*/
|
return HPR_OK;
|
}
|
|
//»ñÈ¡½çÃæÉÏËùÓпؼþÖеÄÖµ
|
int CMotion::getEachWidgetValue()
|
{
|
if(NULL == m_pstruMotion || NULL == m_iArryChannel)
|
{
|
return HPR_ERROR;
|
}
|
|
//»ñÈ¡ÒÆ¶¯Õì²âÇøÓò
|
int i, j;
|
for(i = 0; i < KIT_MOTION_HEIGHT; i++)
|
{
|
for(j = 0; j < KIT_MOTION_WIDTH; j++)
|
{
|
if(m_checkMotionScope[i][j].isChecked())
|
{
|
m_pstruMotion->byMotionScope[i][j] = 1;
|
}
|
else
|
{
|
m_pstruMotion->byMotionScope[i][j] = 0;
|
}
|
}
|
}
|
|
//»ñÈ¡ÁéÃô¶È
|
if(ui.comboMotionSensitive->currentIndex() <= 5)
|
{
|
m_pstruMotion->byMotionSensitive = ui.comboMotionSensitive->currentIndex();
|
}
|
else
|
{
|
m_pstruMotion->byMotionSensitive = 0xff;
|
}
|
|
//¾«¶È
|
//ÓÐ×¢ÊÍ//
|
//m_pstruMotion->byPrecision = ui.comboPrecision->currentIndex();
|
|
//ÉèÖñ¨¾¯·½Ê½
|
getMotionAlarmTypeWidget();
|
//»ñÈ¡²¼·Àʱ¼ä
|
int iTime;
|
int iWeekDay;
|
iWeekDay = ui.comboWeekDay->currentIndex();
|
for(i = 0; i < MAX_TIMESEGMENT_V30; i++)
|
{
|
//¿ªÊ¼Ð¡Ê±
|
KIT_editToInt(&(m_editStartHour[i]), &iTime);
|
m_pstruMotion->struAlarmTime[iWeekDay][i].byStartHour = iTime;
|
//¿ªÊ¼·ÖÖÓ
|
KIT_editToInt(&(m_editStartMin[i]), &iTime);
|
m_pstruMotion->struAlarmTime[iWeekDay][i].byStartMin = iTime;
|
//½áÊøÐ¡Ê±
|
KIT_editToInt(&(m_editEndHour[i]), &iTime);
|
m_pstruMotion->struAlarmTime[iWeekDay][i].byStopHour = iTime;
|
//½áÊø·ÖÖÓ
|
KIT_editToInt(&(m_editEndMin[i]), &iTime);
|
m_pstruMotion->struAlarmTime[iWeekDay][i].byStopMin = iTime;
|
}
|
|
//±¨¾¯´¥·¢µÄͨµÀ
|
for(i = 0; i < MAX_CHANNUM_V30; i++)
|
{
|
if(m_checkChannel[i].isChecked())
|
{
|
m_pstruMotion->byRelRecordChan[i] = 1;
|
}
|
else
|
{
|
m_pstruMotion->byRelRecordChan[i] = 0;
|
}
|
}
|
|
return HPR_OK;
|
}
|
|
//ÉèÖñ¨¾¯´¦Àí·½Ê½
|
int CMotion::setMotionAlarmTypeWidget()
|
{
|
if(m_pstruMotion->struMotionHandleType.dwHandleType == 0)//ÎÞÏìÓ¦
|
{
|
return HPR_OK;
|
}
|
//¼àÊÓÆ÷Éϱ¨¾¯
|
if((m_pstruMotion->struMotionHandleType.dwHandleType & 0x01) == 0x01)
|
{
|
ui.checkbo01->setChecked(TRUE);
|
}
|
else
|
{
|
ui.checkbo01->setChecked(FALSE);
|
}
|
//ÉùÒô±¨¾¯
|
if((m_pstruMotion->struMotionHandleType.dwHandleType & 0x02) == 0x02)
|
{
|
ui.checkbo02->setChecked(TRUE);
|
}
|
else
|
{
|
ui.checkbo02->setChecked(FALSE);
|
}
|
//ÉÏ´«ÖÐÐÄ
|
if((m_pstruMotion->struMotionHandleType.dwHandleType & 0x04) == 0x04)
|
{
|
ui.checkbo04->setChecked(TRUE);
|
}
|
else
|
{
|
ui.checkbo04->setChecked(FALSE);
|
}
|
//´¥·¢±¨¾¯Êä³ö
|
if((m_pstruMotion->struMotionHandleType.dwHandleType & 0x08) == 0x08)
|
{
|
ui.checkbo08->setChecked(TRUE);
|
ui.tableAlarmOut->setEnabled(TRUE);
|
int i;
|
for(i = 0; i < MAX_ALARMOUT_V30; i++)//±¨¾¯Êä³ö
|
{
|
if(m_pcheckAlarmOut[i] != NULL)//±¨¾¯Êä³öcheckbox²»Îª¿Õ
|
{
|
if(m_pstruMotion->struMotionHandleType.byRelAlarmOut[i] == 0)
|
{
|
m_pcheckAlarmOut[i]->setChecked(FALSE);
|
}
|
else
|
{
|
m_pcheckAlarmOut[i]->setChecked(TRUE);
|
}
|
}
|
}
|
}
|
else
|
{
|
ui.checkbo08->setChecked(FALSE);
|
ui.tableAlarmOut->setEnabled(FALSE);
|
}
|
//JPEGץͼ£¬²¢ÉÏ´«ÖÐÐÄ
|
if((m_pstruMotion->struMotionHandleType.dwHandleType & 0x10) == 0x10)
|
{
|
ui.checkbo10->setChecked(TRUE);
|
}
|
else
|
{
|
ui.checkbo10->setChecked(FALSE);
|
}
|
|
return HPR_OK;
|
}
|
|
//»ñÈ¡±¨¾¯´¦Àí·½Ê½
|
int CMotion::getMotionAlarmTypeWidget()
|
{
|
if(NULL == m_pstruMotion)
|
{
|
return HPR_ERROR;
|
}
|
|
//´¦Àí·½Ê½²ÎÊý
|
int dwHandleType;
|
int i;
|
dwHandleType = 0;
|
if(ui.checkbo01->isChecked())
|
{
|
dwHandleType += 1;
|
}
|
if(ui.checkbo02->isChecked())
|
{
|
dwHandleType += 2;
|
}
|
if(ui.checkbo04->isChecked())
|
{
|
dwHandleType += 4;
|
}
|
if(ui.checkbo08->isChecked())
|
{
|
dwHandleType += 8;
|
for(i = 0; i < MAX_ALARMOUT_V30; i++)
|
{
|
if(m_pcheckAlarmOut[i] != NULL)
|
{
|
if(m_pcheckAlarmOut[i]->isChecked())
|
{
|
m_pstruMotion->struMotionHandleType.byRelAlarmOut[i] = 1;
|
}
|
else
|
{
|
m_pstruMotion->struMotionHandleType.byRelAlarmOut[i] = 0;
|
}
|
}
|
}
|
}
|
if(ui.checkbo10->isChecked())
|
{
|
dwHandleType += 16;
|
}
|
m_pstruMotion->struMotionHandleType.dwHandleType = dwHandleType;
|
|
return HPR_OK;
|
}
|
|
//¸ù¾Ý¿ÉÓÃIDºÅ,´´½¨´¥·¢Â¼ÏñͨµÀ£»
|
int CMotion::createChannelCheck()
|
{
|
//ÏÈ»ñÈ¡¿ÉÓÃͨµÀµÄÊýÄ¿
|
int iChannelNum;
|
int i;
|
for(i = 0; i < MAX_CHANNUM_V30; i++)
|
{
|
if(m_iArryChannel[i] < 0 )
|
{
|
break;
|
}
|
}
|
iChannelNum = i;
|
|
//½«channnel checkbox ¼ÓÈëµ½channel tableÖÐÈ¥
|
ui.tableChannel->setRowCount(iChannelNum);
|
ui.tableChannel->setColumnCount(1);
|
QStringList list;
|
list<<"´¥·¢Í¨µÀ";
|
ui.tableChannel->setHorizontalHeaderLabels(list);
|
int iRow = 0; //±íʾµÚ¼¸ÐÐ
|
char strChannelID[100] = {0};
|
for(i = 0; i < MAX_CHANNUM_V30; i++)
|
{
|
if(m_iArryChannel[i] < 0 )
|
{
|
break;
|
}
|
else
|
{
|
memset(strChannelID, 0, sizeof(strChannelID));
|
if(m_iArryChannel[i] < MAX_ANALOG_CHANNUM)
|
{
|
sprintf(strChannelID, "Camera%d", m_iArryChannel[i]);
|
}
|
else
|
{
|
sprintf(strChannelID, "IPCamera%d", m_iArryChannel[i]);
|
}
|
m_checkChannel[m_iArryChannel[i] - m_iStartChannelNo].setText(strChannelID);
|
ui.tableChannel->setCellWidget(iRow, 0, &(m_checkChannel[m_iArryChannel[i] - m_iStartChannelNo]));
|
iRow++;
|
}
|
}
|
|
return HPR_OK;
|
}
|
|
int CMotion::setUserID(long lUserID)
|
{
|
if(lUserID < 0)
|
{
|
return HPR_ERROR;
|
}
|
else
|
{
|
m_lUserID = lUserID;
|
}
|
|
return HPR_OK;
|
}
|
|
//¸ù¾Ý±¨¾¯Êä³ö¸öÊý´¥·¢±¨¾¯Êä³ö;
|
int CMotion::createAlarmOutCheck()
|
{
|
if(m_lUserID < 0)
|
{
|
return HPR_ERROR;
|
}
|
|
int iRet;
|
DWORD uiReturnLen;
|
NET_DVR_IPALARMOUTCFG struIPAlarmOut;
|
iRet = NET_DVR_GetDVRConfig(m_lUserID, NET_DVR_GET_IPALARMOUTCFG, -1, &struIPAlarmOut, sizeof(NET_DVR_IPALARMOUTCFG), &uiReturnLen);
|
if(iRet == 0)
|
{
|
//²»Ö§³ÖIP±¨¾¯Êä³ö
|
memset(&struIPAlarmOut, 0, sizeof(struIPAlarmOut));
|
iRet = NET_DVR_GetLastError();
|
//QMessageBox::information(this, tr("Please check!"), tr("Get device parameters error! \"%1\"").arg(iRet));
|
}
|
|
//»ñÈ¡IP±¨¾¯Êä³öµÄ¸öÊý£¬ÒÔÉèÖñí¸ñµÄÐÐÊý
|
int i;
|
int iRow = 0;
|
for(i = 0; i < MAX_IP_ALARMOUT; i++ )
|
{
|
if(struIPAlarmOut.struIPAlarmOutInfo[i].byIPID > 0)
|
{
|
iRow++;
|
}
|
}
|
iRow += m_iAlarmOutNum;
|
ui.tableAlarmOut->setRowCount(iRow);
|
ui.tableAlarmOut->setColumnCount(1);
|
QStringList list;
|
list<<"±¨¾¯Êä³ö";
|
ui.tableAlarmOut->setHorizontalHeaderLabels(list);
|
|
//Çå³ýÒÔǰ±í¸ñÖÐÊý¾Ý
|
ui.tableAlarmOut->clear();
|
for(i = 0; i < MAX_ALARMOUT_V30; i++)
|
{
|
m_pcheckAlarmOut[i] = NULL;
|
}
|
|
//Íù±í¸ñÖмÓÈëÄ£Äⱨ¾¯Êä³ö
|
for(i = 0; i < m_iAlarmOutNum; i++)
|
{
|
//new Ò»¸öеÄcheckbox
|
m_pcheckAlarmOut[i] = new(std::nothrow) QCheckBox;
|
//»ñÈ¡±¨¾¯Êä³öÃû
|
getAlarmOutInfo(i, m_pcheckAlarmOut[i]);
|
//¼ÓÈëµ½tableÖÐÈ¥
|
ui.tableAlarmOut->setCellWidget(i, 0, (m_pcheckAlarmOut[i]));
|
}
|
|
//IP±¨¾¯Êä³ö
|
for(i = 0; i < MAX_IP_ALARMOUT; i++)
|
{
|
//ÅжÏIP±¨¾¯Êä³öÊÇ·ñ¿ÉÓÃ
|
if(struIPAlarmOut.struIPAlarmOutInfo[i].byIPID > 0)
|
{
|
//new³öÀ´Ò»¸öеÄcheckbox
|
m_pcheckAlarmOut[i + MAX_ANALOG_ALARMOUT] = new(std::nothrow) QCheckBox;
|
//»ñÈ¡±¨¾¯Êä³öÃû³Æ
|
getAlarmOutInfo(i + MAX_ANALOG_ALARMOUT, m_pcheckAlarmOut[i + MAX_ANALOG_ALARMOUT]);
|
//¼ÓÈëµ½tableÖÐÈ¥
|
ui.tableAlarmOut->setCellWidget(i + m_iAlarmOutNum, 0, (m_pcheckAlarmOut[i + MAX_ANALOG_ALARMOUT]));
|
}
|
}
|
|
return HPR_OK;
|
}
|
|
//¸ù¾Ý±¨¾¯Êä³öÐòºÅ£¬»ñÈ¡±¨¾¯Êä³öÃû³Æ
|
int CMotion::getAlarmOutInfo(int iAlarmOut, QCheckBox *pQCheckAlarmOut)
|
{
|
char strTemp[100] = {0};
|
if(iAlarmOut < MAX_ANALOG_ALARMOUT)
|
{
|
sprintf(strTemp, "AlarmOut%d", iAlarmOut + 1);
|
}
|
else
|
{
|
sprintf(strTemp, "IPAlarmOut%d", iAlarmOut - MAX_ANALOG_ALARMOUT + 1);
|
}
|
pQCheckAlarmOut->setText(strTemp);
|
|
return HPR_OK;
|
}
|
|
//ÉèÖñ¨¾¯Êä³ö³ÉÔ±±äÁ¿
|
int CMotion::setAlarmOutNum(int iAlarmOutNum)
|
{
|
if(iAlarmOutNum < 0 || iAlarmOutNum > 64)
|
{
|
return HPR_ERROR;
|
}
|
m_iAlarmOutNum = iAlarmOutNum;
|
return HPR_OK;
|
}
|
|
//ÉèÖÃͨµÀÊýÄ¿
|
int CMotion::setChannelID(int *piChannelID)
|
{
|
if(NULL == piChannelID)
|
{
|
return HPR_ERROR;
|
}
|
m_iArryChannel = piChannelID;
|
return HPR_OK;
|
}
|
|
//ÉèÖÃÒÆ¶¯Õì²â±¨¾¯²ÎÊý
|
int CMotion::setStruMotion(NET_DVR_MOTION_V30 *pstruMotion)
|
{
|
if(NULL == pstruMotion)
|
{
|
return HPR_ERROR;
|
}
|
m_pstruMotion = pstruMotion;
|
return HPR_OK;
|
}
|
|
//ÉèÖÃÆðʼͨµÀºÅ
|
int CMotion::setStartChannelNo(int iStartChannelNo)
|
{
|
if(iStartChannelNo < 0 || iStartChannelNo > 64)
|
{
|
return HPR_ERROR;
|
}
|
|
m_iStartChannelNo = iStartChannelNo;
|
return HPR_OK;
|
}
|
|
void CMotion::comboWeekDayChanged(int iWeekDay)
|
{
|
if(m_pstruMotion == NULL)
|
{
|
return;
|
}
|
int i;
|
int iTemp;
|
for(i = 0; i < MAX_TIMESEGMENT_V30; i++)
|
{
|
//ʱ¼ä
|
iTemp = m_pstruMotion->struAlarmTime[iWeekDay][i].byStartHour;
|
KIT_intToEdit(&(m_editStartHour[i]), iTemp);
|
iTemp = m_pstruMotion->struAlarmTime[iWeekDay][i].byStartMin;
|
KIT_intToEdit(&(m_editStartMin[i]), iTemp);
|
iTemp = m_pstruMotion->struAlarmTime[iWeekDay][i].byStopHour;
|
KIT_intToEdit(&(m_editEndHour[i]), iTemp);
|
iTemp = m_pstruMotion->struAlarmTime[iWeekDay][i].byStopMin;
|
KIT_intToEdit(&(m_editEndMin[i]), iTemp);
|
}
|
}
|
|
//Ñ¡Öб¨¾¯Êä³ö
|
void CMotion::checkAlarmOut()
|
{
|
if(ui.checkbo08->isChecked())
|
{
|
ui.tableAlarmOut->setEnabled(TRUE);
|
}
|
else
|
{
|
ui.tableAlarmOut->setEnabled(FALSE);
|
}
|
}
|
|
void CMotion::on_btnSave_clicked()
|
{
|
getEachWidgetValue();
|
}
|
|
//event
|
void CMotion::showEvent ( QShowEvent * event )
|
{
|
if(event ==NULL)
|
{
|
}
|
|
//»ñÈ¡ÏÔʾ²ÎÊý
|
setEachWidgetValue();
|
}
|