qt/LedOK/device/ctrltestpanel.cpp

510 lines
19 KiB
C++
Raw Normal View History

2023-05-15 16:06:10 +08:00
#include "ctrltestpanel.h"
#include "tools.h"
#include "gutil/qgui.h"
#include "gutil/qnetwork.h"
#include "base/waitingdlg.h"
#include <QFileDialog>
#include <QLineEdit>
#include <QJsonObject>
#include <QJsonDocument>
#include "globaldefine.h"
#include <QButtonGroup>
#include <QMessageBox>
#include <QHostAddress>
2023-08-01 11:42:41 +08:00
CtrlTestPanel::CtrlTestPanel() {
2023-05-15 16:06:10 +08:00
auto vBox = new VBox(this);
labelTestScreen = new QLabel;
labelTestScreen->setAlignment(Qt::AlignCenter);
vBox->addWidget(labelTestScreen);
auto hBox = new HBox(vBox);
auto vv = new VBox(hBox);
groupBox = new QGroupBox;
auto vvv = new VBox(groupBox);
auto hhh = new HBox(vvv);
hhh->addStretch();
radioButtonRed = new QRadioButton;
hhh->addWidget(radioButtonRed);
radioButtonGreen = new QRadioButton;
hhh->addWidget(radioButtonGreen);
radioButtonBlue = new QRadioButton;
hhh->addWidget(radioButtonBlue);
radioButtonWhite = new QRadioButton;
hhh->addWidget(radioButtonWhite);
hhh->addStretch();
hhh = new HBox(vvv);
hhh->addStretch();
checkBoxVertical = new QCheckBox;
hhh->addWidget(checkBoxVertical);
checkBoxSlash = new QCheckBox;
hhh->addWidget(checkBoxSlash);
checkBoxHorizontal = new QCheckBox;
hhh->addWidget(checkBoxHorizontal);
hhh->addStretch();
hhh = new HBox(vvv);
hhh->addStretch();
label = new QLabel;
hhh->addWidget(label);
spinBoxLineSpeed = new QSpinBox;
spinBoxLineSpeed->setMaximum(99999);
hhh->addWidget(spinBoxLineSpeed);
label_5 = new QLabel;
hhh->addWidget(label_5);
hhh->addSpacing(20);
label_2 = new QLabel;
hhh->addWidget(label_2);
spinBoxLineDistance = new QSpinBox;
spinBoxLineDistance->setMaximum(128);
hhh->addWidget(spinBoxLineDistance);
label_6 = new QLabel;
hhh->addWidget(label_6);
hhh->addStretch();
pushButtonStartLine = new QPushButton;
pushButtonStartLine->setMinimumSize(QSize(60, 30));
pushButtonStartLine->setMaximumSize(QSize(80, 16777215));
vvv->addWidget(pushButtonStartLine, 0, Qt::AlignHCenter);
vv->addWidget(groupBox);
groupBox_2 = new QGroupBox;
vvv = new VBox(groupBox_2);
checkBoxShowInfo = new QCheckBox;
vvv->addWidget(checkBoxShowInfo, 0, Qt::AlignLeft);
hhh = new HBox(vvv);
hhh->addStretch();
checkBox_red = new QCheckBox;
hhh->addWidget(checkBox_red);
checkBox_green = new QCheckBox;
hhh->addWidget(checkBox_green);
checkBox_blue = new QCheckBox;
hhh->addWidget(checkBox_blue);
checkBox_white = new QCheckBox;
hhh->addWidget(checkBox_white);
hhh->addStretch();
hhh = new HBox(vvv);
hhh->addStretch();
label_3 = new QLabel;
hhh->addWidget(label_3);
spinBoxGraySpeed = new QSpinBox;
spinBoxGraySpeed->setMinimumSize(QSize(60, 0));
spinBoxGraySpeed->setMinimum(10);
spinBoxGraySpeed->setMaximum(99999);
hhh->addWidget(spinBoxGraySpeed);
label_8 = new QLabel;
hhh->addWidget(label_8);
label_4 = new QLabel;
hhh->addWidget(label_4);
spinBoxGrayValue = new QSpinBox;
spinBoxGrayValue->setMaximum(255);
hhh->addWidget(spinBoxGrayValue);
label_7 = new QLabel;
hhh->addWidget(label_7);
hhh->addStretch();
pushButtonStartGray = new QPushButton;
pushButtonStartGray->setMinimumSize(QSize(60, 30));
pushButtonStartGray->setMaximumSize(QSize(80, 16777215));
vvv->addWidget(pushButtonStartGray, 0, Qt::AlignHCenter);
vv->addWidget(groupBox_2);
groupBox_3 = new QGroupBox;
vvv = new VBox(groupBox_3);
checkBoxGradient = new QCheckBox;
vvv->addWidget(checkBoxGradient);
hhh = new HBox(vvv);
hhh->addStretch();
radioButton_red = new QRadioButton;
hhh->addWidget(radioButton_red);
radioButton_Green = new QRadioButton;
hhh->addWidget(radioButton_Green);
radioButton_Blue = new QRadioButton;
hhh->addWidget(radioButton_Blue);
radioButton_White = new QRadioButton;
hhh->addWidget(radioButton_White);
hhh->addStretch();
pushButtonStartColor = new QPushButton;
pushButtonStartColor->setMinimumSize(QSize(60, 30));
pushButtonStartColor->setMaximumSize(QSize(80, 16777215));
vvv->addWidget(pushButtonStartColor, 0, Qt::AlignHCenter);
vv->addWidget(groupBox_3);
hhh = new HBox(vv);
hhh->addStretch();
pushButtonStopTest = new QPushButton;
pushButtonStopTest->setMinimumSize(QSize(60, 30));
hhh->addWidget(pushButtonStopTest);
hhh->addStretch();
vv->addStretch();
auto line = new QFrame;
line->setFrameShape(QFrame::VLine);
line->setFrameShadow(QFrame::Sunken);
hBox->addWidget(line);
hBox->addStretch();
vv = new VBox(hBox);
lineEdit = new QLineEdit;
lineEdit->setMinimumSize(QSize(0, 36));
lineEdit->setMaximumSize(QSize(194, 16777215));
lineEdit->setAutoFillBackground(false);
lineEdit->setStyleSheet(QString::fromUtf8("color: rgb(0, 255, 0);\n"
"background-color: rgb(0, 0, 0);"));
lineEdit->setAlignment(Qt::AlignCenter);
vv->addWidget(lineEdit);
auto gridLayout = new Grid(vv);
auto btngrp = new QButtonGroup(this);
for(int i=0; i<10; ++i) {
auto btn = new QPushButton(QString::number(i));
btn->setFixedSize(60, 30);
btn->setProperty("ssType", "progManageTool");
btngrp->addButton(btn, i);
}
gridLayout->addWidget(btngrp->button(1), 0, 0);
gridLayout->addWidget(btngrp->button(2), 0, 1);
gridLayout->addWidget(btngrp->button(3), 0, 2);
gridLayout->addWidget(btngrp->button(4), 1, 0);
gridLayout->addWidget(btngrp->button(5), 1, 1);
gridLayout->addWidget(btngrp->button(6), 1, 2);
gridLayout->addWidget(btngrp->button(7), 2, 0);
gridLayout->addWidget(btngrp->button(8), 2, 1);
gridLayout->addWidget(btngrp->button(9), 2, 2);
gridLayout->addWidget(btngrp->button(0), 3, 0);
connect(btngrp, &QButtonGroup::idClicked, this, [=](int id) {
if(lineEdit->text().contains("-")) lineEdit->clear();
lineEdit->setText(lineEdit->text() + QString::number(id));
2023-05-16 18:03:53 +08:00
btnAnycast->setEnabled(true);
2023-05-15 16:06:10 +08:00
});
pushButton_11 = new QPushButton;
pushButton_11->setFixedSize(QSize(60, 30));
gridLayout->addWidget(pushButton_11, 3, 1, 1, 1);
pushButton_12 = new QPushButton;
pushButton_12->setFixedSize(QSize(60, 30));
gridLayout->addWidget(pushButton_12, 3, 2, 1, 1);
2023-05-16 18:03:53 +08:00
btnAnycast = new QPushButton;
vv->addWidget(btnAnycast);
2023-05-15 16:06:10 +08:00
vv->addStretch();
hBox->addStretch();
vBox->addStretch();
pushButtonStartLine->setProperty("ssType", "progManageTool");
pushButtonStartGray->setProperty("ssType", "progManageTool");
pushButtonStartColor->setProperty("ssType", "progManageTool");
pushButtonStopTest->setProperty("ssType", "progManageTool");
pushButton_11->setProperty("ssType", "progManageTool");
pushButton_12->setProperty("ssType", "progManageTool");
2023-05-16 18:03:53 +08:00
btnAnycast->setProperty("ssType", "progManageTool");
2023-05-15 16:06:10 +08:00
spinBoxLineSpeed->setValue(10);
spinBoxLineDistance->setValue(15);
spinBoxGraySpeed->setValue(10);
spinBoxGrayValue->setValue(0);
radioButtonWhite->setChecked(true);
radioButton_White->setChecked(true);
checkBoxHorizontal->setChecked(true);
checkBoxVertical->setChecked(true);
checkBoxSlash->setChecked(true);
checkBox_red->setChecked(true);
checkBox_green->setChecked(true);
checkBox_blue->setChecked(true);
checkBox_white->setChecked(true);
connect(pushButtonStartLine, &QPushButton::clicked, this, [this] {
if(gSelCards.isEmpty()) {
QMessageBox::information(this, tr("Tip"), tr("NoSelectedController"));
return;
}
QJsonObject json;
json.insert("_id", "TestScreen");
json.insert("_type", "TestScreen");
json.insert("mode", 1);// 0停止 1斜线 2灰度; 3:颜色4渐变
json.insert("speed", spinBoxLineSpeed->value());
2023-05-16 18:03:53 +08:00
if(radioButtonRed->isChecked()) json.insert("color", "#FFFF0000");
else if(radioButtonGreen->isChecked()) json.insert("color", "#FF00FF00");
else if(radioButtonBlue->isChecked()) json.insert("color", "#FF0000FF");
else json.insert("color", "#FFFFFFFF");
2023-05-15 16:06:10 +08:00
json.insert("interval", spinBoxLineDistance->value());
json.insert("horizonalLine", checkBoxHorizontal->isChecked());
json.insert("verticalLine", checkBoxVertical->isChecked());
json.insert("slantLine", checkBoxSlash->isChecked());
json.insert("runLimit", spinBoxGrayValue->value());
json.insert("showInfo", !checkBoxShowInfo->isChecked());
json.insert("red", checkBox_red->isChecked());
json.insert("green", checkBox_green->isChecked());
json.insert("blue", checkBox_blue->isChecked());
json.insert("white", checkBox_white->isChecked());
if(gSelCards.count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("StartTest")+" ...");
Def_CtrlReqPre
connect(reply, &QNetworkReply::finished, this, [=] {
Def_CtrlSetReqAfter
});
} else {
foreach(auto card, gSelCards) {
Def_CtrlSetMulti(tr("StartTest"))
}
}
});
connect(pushButtonStartGray, &QPushButton::clicked, this, [this] {
if(gSelCards.isEmpty()) {
QMessageBox::information(this, tr("Tip"), tr("NoSelectedController"));
return;
}
QJsonObject json;
json.insert("_id", "TestScreen");
json.insert("_type", "TestScreen");
json.insert("mode", 2);// 0停止 1斜线 2灰度; 3:颜色4渐变
json.insert("speed", spinBoxGraySpeed->value());
2023-05-16 18:03:53 +08:00
if(radioButtonRed->isChecked()) json.insert("color", "#FFFF0000");
else if(radioButtonGreen->isChecked()) json.insert("color", "#FF00FF00");
else if(radioButtonBlue->isChecked()) json.insert("color", "#FF0000FF");
else json.insert("color", "#FFFFFFFF");
2023-05-15 16:06:10 +08:00
json.insert("interval", spinBoxLineDistance->value());
json.insert("horizonalLine", checkBoxHorizontal->isChecked());
json.insert("verticalLine", checkBoxVertical->isChecked());
json.insert("slantLine", checkBoxSlash->isChecked());
json.insert("runLimit", spinBoxGrayValue->value());
json.insert("showInfo", !checkBoxShowInfo->isChecked());
json.insert("red", checkBox_red->isChecked());
json.insert("green", checkBox_green->isChecked());
json.insert("blue", checkBox_blue->isChecked());
json.insert("white", checkBox_white->isChecked());
if(gSelCards.count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("StartTest")+" ...");
Def_CtrlReqPre
2023-05-16 18:03:53 +08:00
connect(reply, &QNetworkReply::finished, this, [=] {
Def_CtrlSetReqAfter
});
2023-05-15 16:06:10 +08:00
} else {
foreach(auto card, gSelCards) {
Def_CtrlSetMulti(tr("StartTest"))
}
}
});
connect(pushButtonStartColor, &QPushButton::clicked, this, [this] {
if(gSelCards.isEmpty()) {
QMessageBox::information(this, tr("Tip"), tr("NoSelectedController"));
return;
}
QJsonObject json;
json.insert("_id", "TestScreen");
json.insert("_type", "TestScreen");
2023-05-16 18:03:53 +08:00
json.insert("mode", checkBoxGradient->isChecked() ? 4 : 3);// 0停止 1斜线 2灰度; 3:颜色4渐变
2023-05-15 16:06:10 +08:00
json.insert("speed", spinBoxLineSpeed->value());
2023-05-16 18:03:53 +08:00
if(radioButton_red->isChecked()) json.insert("color", "#FFFF0000");
else if(radioButton_Green->isChecked()) json.insert("color", "#FF00FF00");
else if(radioButton_Blue->isChecked()) json.insert("color", "#FF0000FF");
else json.insert("color", "#FFFFFFFF");
2023-05-15 16:06:10 +08:00
json.insert("interval", spinBoxLineDistance->value());
json.insert("horizonalLine", checkBoxHorizontal->isChecked());
json.insert("verticalLine", checkBoxVertical->isChecked());
json.insert("slantLine", checkBoxSlash->isChecked());
json.insert("runLimit", spinBoxGrayValue->value());
json.insert("showInfo", !checkBoxShowInfo->isChecked());
json.insert("red", checkBox_red->isChecked());
json.insert("green", checkBox_green->isChecked());
json.insert("blue", checkBox_blue->isChecked());
json.insert("white", checkBox_white->isChecked());
if(gSelCards.count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("StartTest")+" ...");
Def_CtrlReqPre
connect(reply, &QNetworkReply::finished, this, [=] {
Def_CtrlSetReqAfter
});
} else {
foreach(auto card, gSelCards) {
Def_CtrlSetMulti(tr("StartTest"))
}
}
});
connect(pushButtonStopTest, &QPushButton::clicked, this, [this] {
if(gSelCards.isEmpty()) {
QMessageBox::information(this, tr("Tip"), tr("NoSelectedController"));
return;
}
QJsonObject json;
json.insert("_id", "TestScreen");
json.insert("_type", "TestScreen");
json.insert("mode", 0);
if(gSelCards.count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("StopTest")+" ...");
Def_CtrlReqPre
connect(reply, &QNetworkReply::finished, this, [=] {
Def_CtrlSetReqAfter
});
} else {
foreach(auto card, gSelCards) {
Def_CtrlSetMulti(tr("StopTest"))
}
}
});
connect(pushButton_11, &QPushButton::clicked, this, [=] {
lineEdit->clear();
2023-05-16 18:03:53 +08:00
btnAnycast->setEnabled(false);
2023-05-15 16:06:10 +08:00
});
connect(pushButton_12, &QPushButton::clicked, this, [=] {
if(gSelCards.isEmpty()) {
QMessageBox::information(this, tr("Tip"), tr("NoSelectedController"));
return;
}
int iIndex = lineEdit->text().toInt();
if(gSelCards.count()==1) SendAnycastCmd(gSelCards[0], 0, true);
else {
foreach(auto card, gSelCards) SendAnycastCmd(card, iIndex, false);
}
lineEdit->setText("-"+tr("loopback mode")+"-");
2023-05-16 18:03:53 +08:00
btnAnycast->setEnabled(false);
2023-05-15 16:06:10 +08:00
});
2023-05-16 18:03:53 +08:00
connect(btnAnycast, &QPushButton::clicked, this, [=] {
2023-05-15 16:06:10 +08:00
if(gSelCards.isEmpty()) {
QMessageBox::information(this, tr("Tip"), tr("NoSelectedController"));
return;
}
int iIndex = lineEdit->text().toInt();
if(gSelCards.count()==1) SendAnycastCmd(gSelCards[0], iIndex, true);
else foreach(auto card, gSelCards) SendAnycastCmd(card, iIndex, false);
lineEdit->setText(tr("Anycast")+" - "+lineEdit->text());
2023-05-16 18:03:53 +08:00
btnAnycast->setEnabled(false);
2023-05-15 16:06:10 +08:00
});
2023-05-16 18:03:53 +08:00
btnAnycast->setEnabled(false);
2023-05-15 16:06:10 +08:00
lineEdit->setValidator(new QIntValidator(0, 100, this));
transUi();
}
void CtrlTestPanel::changeEvent(QEvent *event) {
QWidget::changeEvent(event);
if(event->type() == QEvent::LanguageChange) transUi();
}
void CtrlTestPanel::transUi() {
labelTestScreen->setText(tr("Test Screen"));
groupBox->setTitle(tr("Line test"));
radioButtonRed->setText(tr("Red"));
radioButtonGreen->setText(tr("Green"));
radioButtonBlue->setText(tr("Blue"));
radioButtonWhite->setText(tr("White"));
radioButton_red->setText(tr("Red"));
radioButton_Green->setText(tr("Green"));
radioButton_Blue->setText(tr("Blue"));
radioButton_White->setText(tr("White"));
checkBoxVertical->setText(tr("Vertical"));
checkBoxHorizontal->setText(tr("Horizontal"));
checkBoxSlash->setText(tr("Slash"));
label->setText(tr("Speed"));
label_5->setText(tr("ms(>10)"));
checkBoxHorizontal->setText(tr("Horizontal"));
label_2->setText(tr("Line Distance"));
pushButtonStartLine->setText(tr("Test"));
groupBox_2->setTitle(tr("Gradation test"));
checkBoxShowInfo->setText(tr("Only the gray value is displayed"));
checkBox_red->setText(tr("Red"));
checkBox_green->setText(tr("Green"));
checkBox_blue->setText(tr("Blue"));
checkBox_white->setText(tr("White"));
label_3->setText(tr("Speed"));
label_4->setText(tr("GrayValue"));
pushButtonStartGray->setText(tr("Test"));
pushButtonStartColor->setText(tr("Test"));
groupBox_3->setTitle(tr("Color test"));
checkBoxGradient->setText(tr("Gradient"));
radioButton_red->setText(tr("Red"));
radioButton_Green->setText(tr("Green"));
radioButton_Blue->setText(tr("Blue"));
radioButton_White->setText(tr("White"));
pushButtonStopTest->setText(tr("Stop"));
pushButton_11->setText(tr("Clear"));
pushButton_12->setText(tr("Reset"));
2023-05-16 18:03:53 +08:00
btnAnycast->setText(tr("Anycast"));
2023-05-15 16:06:10 +08:00
}
void CtrlTestPanel::SendAnycastCmd(LedCard card, int iProgramIndex, bool isSingle) {
QTcpSocket *send = new QTcpSocket();
connect(send, SIGNAL(connected()), this, SLOT(connect_sucessful()));
connect(send, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(show_error(QAbstractSocket::SocketError)));
send->connectToHost(QHostAddress(card.ip),31299);
ST_ANSY_PROGRAM_PACKET tempStreadPakcet;
tempStreadPakcet.ucCommType=0x97;
tempStreadPakcet.iBaoLiu=0;
tempStreadPakcet.iLength=4;
unsigned char uctemp[4]={0};
uctemp[0]=iProgramIndex;
memcpy(tempStreadPakcet.pDataBuffer,uctemp,4);
tempStreadPakcet.pDataBuffer[tempStreadPakcet.iLength]=GetCheckCodeIn8(&tempStreadPakcet.ucCommType,tempStreadPakcet.iLength+sizeof(tempStreadPakcet.iBaoLiu)+sizeof(tempStreadPakcet.ucCommType)+sizeof(tempStreadPakcet.iLength));
int iLenPacket=3*sizeof(unsigned char)+sizeof(char)+sizeof(int)+sizeof(int)+tempStreadPakcet.iLength+sizeof(char);/////除正文外的协议结构大小;
QByteArray databuf = QByteArray(reinterpret_cast<char*>(&tempStreadPakcet), iLenPacket);
if(!send->waitForConnected(10000)) //等待连接返回
{
if(isSingle) QMessageBox::information(this, tr("Tip"), tr("Connect timeout"));
else gFdResInfo->append(card.id+":"+tr("receive")+"<-"+tr("Connect")+":"+tr("timeout"));
send->close();
delete send;
return;
}
send->write(databuf);
if(send->waitForBytesWritten(3000)) {
send->read(send->bytesAvailable());
if(isSingle) QMessageBox::information(this, tr("Tip"), (iProgramIndex==0 ? tr("Reset loop mode") : tr("Anycast"))+":"+tr("success"));
else gFdResInfo->append(card.id+":"+tr("receive")+"<-"+tr("Anycast")+":"+tr("success"));
}
send->close();
delete send;
}