FaceAccess/Linguist/setUi/settingUiAccMng.cpp
2024-07-11 11:27:12 +08:00

356 lines
16 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "settingUiAccMng.h"
#include <QDebug>
#include "UiConfig.h"
int settingUiAccMng::m_pageIndex = 0;
settingUiAccMng::settingUiAccMng(int pageIndex, QWidget *parent)
: SettingUiPage(QVector<SettingUiPage::SetOpn>{
SetOpn(tr("开锁延迟(秒)"), "x", myListWidget::enPropertyMoreArrow),
SetOpn(tr("开锁时间(秒)"), "x", myListWidget::enPropertyMoreArrow),
SetOpn(tr("开锁信号"), "xxxxx", myListWidget::enPropertyMoreArrow),
SetOpn(tr("反向通行"), "xxxxx", static_cast<myListWidget::enProperty>(myListWidget::enPropertySwitch| myListWidget::enPropertyIndent1)),
SetOpn(tr("RS485"), "xx", myListWidget::enPropertyMoreArrow),
SetOpn(tr("RS485协议1设备地址(0-255)"), "xx", static_cast<myListWidget::enProperty>(myListWidget::enPropertyMoreArrow | myListWidget::enPropertyIndent1)),
SetOpn(tr("静电测试范围"), "xx", static_cast<myListWidget::enProperty>(myListWidget::enPropertyMoreArrow | myListWidget::enPropertyIndent1)),
SetOpn(tr("GPIO4接口"), "xx", myListWidget::enPropertyMoreArrow),
SetOpn(tr("GPIO5接口"), "xx", myListWidget::enPropertyMoreArrow),
SetOpn(tr("门超时报警(秒)"), "xx", static_cast<myListWidget::enProperty>(myListWidget::enPropertyMoreArrow | myListWidget::enPropertyIndent1)),
SetOpn(tr("防拆报警"), "", myListWidget::enPropertySwitch),
SetOpn(tr("防拆报警信号"), "xx", static_cast<myListWidget::enProperty>(myListWidget::enPropertyMoreArrow | myListWidget::enPropertyIndent1)),
}, parent)
{
m_pageIndex = pageIndex;
qDebug() << "settingUiAccMng()";
}
settingUiAccMng::~settingUiAccMng()
{
qDebug() << "~settingUiAccMng()";
}
void settingUiAccMng::setBackstageUiinterface(BackstageInterfaceForUi* interface)
{
m_backstageIf = interface;
reset();
}
void settingUiAccMng::reset()
{
if(nullptr == m_backstageIf){
return;
}
for(int i = 0; i < config.size(); i ++){
QListWidgetItem* pItem = m_listWidget->item(i);
myListWidget* wdt = dynamic_cast<myListWidget*>(m_listWidget->itemWidget(pItem));
if(wdt == nullptr){
return;
}
QString str;
switch(i){
case enAccOpenDelay:
str = QString::number(m_backstageIf->getUnlockDelay());
break;
case enAccOpenTime:
str = QString::number(m_backstageIf->getUnlockTime());
break;
case enAccOpenSig:
str = OpenSig[m_backstageIf->getUnlockSig()];
break;
#if 0
case enAccAlmSig:
str = AlarmSig[m_backstageIf->getWarningSig()];
break;
#endif
case enAccRs485:
str = Rs485Cfg[m_backstageIf->getRs485Cfg()];
break;
case enAccRs485Prot1Addr:
str = (m_backstageIf->getRs485Prot1Addr() >= 0 ? QString::number(m_backstageIf->getRs485Prot1Addr()) : tr("(未设置)"));
break;
case enAccGPIO4:
str = GPIOCfg[m_backstageIf->getGpio4Cfg()];
break;
case enAccGPIO5:
str = GPIOCfg[m_backstageIf->getGpio5Cfg()];
break;
case enAccDoorCloseOvertime:
str = QString::number(m_backstageIf->getDoorCloseOvertime());
break;
case enAccAntiDemolitionSw:
wdt->updateIcon(m_backstageIf->getAntiDemolitionSw() ? ":/res/image/on.png" : ":/res/image/off.png");
break;
case enAccAntiDemolitionOutput:
str = AntiDemolitionOutput[m_backstageIf->getAntiDemolitionOutput()];
break;
case enAccRs485ReverseAccessSw: {
wdt->updateIcon(m_backstageIf->getReverseAccessSw() ? ":/res/image/on.png" : ":/res/image/off.png");
break;
}
default:
break;
}
wdt->updateLabel(str);
}
controlListWidgetItemShow(m_backstageIf->getRs485Cfg() == 1, enAccRs485Prot1Addr); //协议1显示设置
controlListWidgetItemShow(m_backstageIf->getRs485Cfg() == 3, enAccRs485Prot3Cfg); //协议3显示设置
controlListWidgetItemShow(m_backstageIf->getAntiDemolitionSw(), enAccAntiDemolitionOutput);
controlListWidgetItemShow(m_backstageIf->getGpio4Cfg() == 1 || m_backstageIf->getGpio5Cfg() == 1, enAccDoorCloseOvertime);
controlListWidgetItemShow(m_backstageIf->getUnlockSig() == UnlockSigRs485, enAccRs485ReverseAccessSw);
}
void settingUiAccMng::slotItemClicked(QListWidgetItem* item)
{
if(nullptr == m_backstageIf){
#ifndef DEBUG_MODE
return;
#endif
}
int row = m_listWidget->currentRow();
myListWidget* wdt = dynamic_cast<myListWidget*>(m_listWidget->itemWidget(item));
if(wdt == nullptr){
return;
}
switch(row){
case enAccOpenDelay:
case enAccOpenTime:
case enAccRs485Prot1Addr:
case enAccDoorCloseOvertime:
{
int currentValue = 10;
int min = 0;
int max = 100;
QString tip;
if(enAccOpenDelay == row){
currentValue = m_backstageIf->getUnlockDelay();
min = 0;
max = 10;
}else if(enAccOpenTime == row){
currentValue = m_backstageIf->getUnlockTime();
min = 1;
max = 10;
}else if(enAccRs485Prot1Addr == row){
currentValue = 0;//m_backstageIf->getRs485Prot1Addr();
min = 0;
max = 255;
}else if(enAccDoorCloseOvertime == row){
currentValue = m_backstageIf->getDoorCloseOvertime();
min = 1;
max = 300;
}
SliderDialog dlg(currentValue, min, max, tip, parent()->parent());
if(dlg.exec() == QDialog::Accepted)
{
int valueSet = dlg.getValueSet();
if(enAccOpenDelay == row){
m_backstageIf->setUnlockDelay(valueSet);
}else if(enAccOpenTime == row){
m_backstageIf->setUnlockTime(valueSet);
}else if(enAccRs485Prot1Addr == row){
m_backstageIf->setRs485Prot1Addr(valueSet);
}else if(enAccDoorCloseOvertime == row){
m_backstageIf->setDoorCloseOvertime(valueSet);
}
wdt->updateLabel(QString::number(valueSet));
}
}
break;
case enAccOpenSig:
//case enAccAlmSig:
case enAccRs485:
case enAccGPIO4:
case enAccGPIO5:
case enAccAntiDemolitionOutput:{
int choosed = 0;
QVector<QString> options;
if(enAccOpenSig == row){
options = OpenSig;
if(UiConfig::GetInstance()->isFuncNotSupport(FuncWg42)){
options.remove(4);
}
choosed = static_cast<int>(m_backstageIf->getUnlockSig());
}
#if 0
else if(enAccAlmSig == row){
options = AlarmSig;
choosed = static_cast<int>(m_backstageIf->getWarningSig());
}
#endif
else if(enAccRs485 == row){
options = Rs485Cfg;
choosed = static_cast<int>(m_backstageIf->getRs485Cfg());
}else if(enAccGPIO4 == row){
options = GPIOCfg;
choosed = static_cast<int>(m_backstageIf->getGpio4Cfg());
}else if(enAccGPIO5 == row){
options = GPIOCfg;
choosed = static_cast<int>(m_backstageIf->getGpio5Cfg());
}else if(enAccAntiDemolitionOutput == row){
options = AntiDemolitionOutput;
choosed = static_cast<int>(m_backstageIf->getAntiDemolitionOutput());
}
RadioBtnChooseDialog dlg(options, parent()->parent(), choosed);
if(dlg.exec() == QDialog::Accepted){
int newChoosed = dlg.getChoosedIndex();
if(newChoosed != choosed){
if(enAccOpenSig == row){
if(1 == newChoosed &&
(1 == m_backstageIf->getAntiDemolitionOutput()) ){//1 == m_backstageIf->getWarningSig() ||
InfoDialog(tr("本地继电器已使用"), parent()->parent()).exec();
}else {
m_backstageIf->setUnlockSig(static_cast<enUnlockSignal>(newChoosed));
wdt->updateLabel(options[newChoosed]);
controlListWidgetItemShow(m_backstageIf->getUnlockSig() == UnlockSigRs485, enAccRs485ReverseAccessSw);
}
}
#if 0
else if(enAccAlmSig == row){
if(1 == newChoosed &&
(1 == m_backstageIf->getUnlockSig() || 1 == m_backstageIf->getAntiDemolitionOutput()) ){
InfoDialog(tr("本地继电器已使用"), parent()->parent()).exec();
}else{
m_backstageIf->setWarningSig(newChoosed);
wdt->updateLabel(options[newChoosed]);
}
}
#endif
else if(enAccRs485 == row){
m_backstageIf->setRs485Cfg(newChoosed);
wdt->updateLabel(options[newChoosed]);
QListWidgetItem* pItem = m_listWidget->item(enAccRs485Prot1Addr);
myListWidget* swWidget = dynamic_cast<myListWidget*>(m_listWidget->itemWidget(pItem));
if(swWidget){
swWidget->updateLabel((m_backstageIf->getRs485Prot1Addr() >= 0 ? QString::number(m_backstageIf->getRs485Prot1Addr()) : tr("(未设置)")));
}
controlListWidgetItemShow(1 == newChoosed, enAccRs485Prot1Addr); //协议1显示地址
controlListWidgetItemShow(3 == newChoosed, enAccRs485Prot3Cfg);
if(1 == newChoosed){
InfoDialog(tr("请注意设置RS485协议1设备地址"), parent()->parent()).exec();
}
}else if(enAccGPIO4 == row){
if(0 != newChoosed && m_backstageIf->getAntiDemolitionSw() && 2 == m_backstageIf->getAntiDemolitionOutput()){
InfoDialog(tr("GPIO4已设置为防拆报警输出请重新设置"), parent()->parent()).exec();
}else if(1 == newChoosed && 1 == m_backstageIf->getGpio5Cfg()){
InfoDialog(tr("GPIO5已设置为门磁请重新设置"), parent()->parent()).exec();
}else if(2 == newChoosed && 2 == m_backstageIf->getGpio5Cfg()){
InfoDialog(tr("GPIO5已设置为消防信号请重新设置"), parent()->parent()).exec();
}else{
m_backstageIf->setGpio4Cfg(newChoosed);
wdt->updateLabel(options[newChoosed]);
controlListWidgetItemShow(1 == m_backstageIf->getGpio4Cfg() || 1 == m_backstageIf->getGpio5Cfg(), enAccDoorCloseOvertime);
}
}else if(enAccGPIO5 == row){
if(0 != newChoosed && m_backstageIf->getAntiDemolitionSw() && 3 == m_backstageIf->getAntiDemolitionOutput()){
InfoDialog(tr("GPIO5已设置为防拆报警输出请重新设置"), parent()->parent()).exec();
}else if(1 == newChoosed && 1 == m_backstageIf->getGpio4Cfg()){
InfoDialog(tr("GPIO4已设置为门磁请重新设置"), parent()->parent()).exec();
}else if(2 == newChoosed && 2 == m_backstageIf->getGpio4Cfg()){
InfoDialog(tr("GPIO4已设置为消防信号请重新设置"), parent()->parent()).exec();
}else{
m_backstageIf->setGpio5Cfg(newChoosed);
wdt->updateLabel(options[newChoosed]);
controlListWidgetItemShow(1 == m_backstageIf->getGpio4Cfg() || 1 == m_backstageIf->getGpio5Cfg(), enAccDoorCloseOvertime);
}
}else if(enAccAntiDemolitionOutput == row){
if(1 == newChoosed && 1 == m_backstageIf->getUnlockSig()){//1 == m_backstageIf->getWarningSig() ||
InfoDialog(tr("本地继电器已被使用,请重新设置!"), parent()->parent()).exec();
}else if(2 == newChoosed && 0 != m_backstageIf->getGpio4Cfg()){
InfoDialog(tr("GPIO4已设置为信号输入请重新设置"), parent()->parent()).exec();
}else if(3 == newChoosed && 0 != m_backstageIf->getGpio5Cfg()){
InfoDialog(tr("GPIO5已设置为信号输入请重新设置"), parent()->parent()).exec();
}else {
m_backstageIf->setAntiDemolitionOutput(newChoosed);
wdt->updateLabel(options[newChoosed]);
}
}
}
}
}
break;
#if 0
case enAccRs485Prot1Addr:
{
if(0 == m_backstageIf->getRs485Prot1Addr()){
bool settingFailed = true;
do{
LineEditInputDialog dlg(config[enAccRs485Prot1Addr].m_sOpn, parent()->parent());
if(dlg.exec() == QDialog::Accepted){
const QString strInput = dlg.getRow(0);
do{
bool isDigi = false;
int input = strInput.toInt(&isDigi);
if(!isDigi){
break;
}
if(0 == m_backstageIf->setRs485Prot1Addr(input)){
wdt->updateLabel(strInput);
settingFailed = false;
}
}while(0);
}
else {
settingFailed = false;
}
if(settingFailed){
InfoDialog(tr("设置有误,请重新输入!"), parent()->parent()).exec();
}
}while(settingFailed);
}
}
break;
#endif
case enAccRs485Prot3Cfg:
{
const QStringList titles{tr("手部"), tr("脚部")};
const QVector<QStringList> sels{{"100KΩ-10MΩ", "750KΩ-10MΩ", "750KΩ-35MΩ", tr("不检测")},
{"100KΩ-35MΩ", "750KΩ-100MΩ", "750KΩ-1000MΩ", tr("不检测")}};
ComSelectDialog dlg(titles, sels, parent()->parent());
int handCfg = 0;
int feetCfg = 0;
m_backstageIf->getRs485Prot3Cfg(handCfg, feetCfg);
dlg.setRow(0, handCfg);
dlg.setRow(1, feetCfg);
if(dlg.exec() == QDialog::Accepted){
m_backstageIf->setRs485Prot3Cfg(dlg.getRow(0), dlg.getRow(1));
}
}
break;
case enAccAntiDemolitionSw:
{
bool setting_value = false;
if(enAccAntiDemolitionSw == row){
setting_value = static_cast<bool>(m_backstageIf->getAntiDemolitionSw());
}
setting_value = static_cast<bool>(!setting_value);
wdt->updateIcon(setting_value ? ":/res/image/on.png" : ":/res/image/off.png");
if(enAccAntiDemolitionSw == row){
controlListWidgetItemShow(setting_value, enAccAntiDemolitionOutput);
m_backstageIf->setAntiDemolitionSw(setting_value);
if(!setting_value){
m_backstageIf->setAntiDemolitionOutput(0);//防止在配置输出信号项功能时与防拆输出冲突
}
}
}
break;
case enAccRs485ReverseAccessSw: {
bool setting_value = m_backstageIf->getReverseAccessSw();
setting_value = !setting_value;
wdt->updateIcon(setting_value ? ":/res/image/on.png" : ":/res/image/off.png");
m_backstageIf->setReverseAccessSw(setting_value);
break;
}
default:
break;
}
}