#include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include #include #include "base/HGUtility.h" #include "analysisjson.h" #include "dialog_mymessagebox.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); initTableWidgetUi(); initDeviceInfo(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::initDeviceInfo() { QStringList oemName{ tr("huagao"), tr("microtek"), tr("hanvon"), tr("lanxum"), tr("deli"), tr("unis"), tr("cumtenn"), tr("auge") }; ui->comboBox_OEM->addItems(oemName); QStringList deviceType{ tr("G100-3399"), tr("G200-3399"), tr("G300-3288"), tr("G306"), tr("G400-3399") }; ui->comboBox_deviceType->addItems(deviceType); int speedTime = 40; while (speedTime <= 130) { ui->comboBox_speedMode->addItem(QString::number(speedTime)); speedTime += 10; } QStringList sleepTime{ tr("Not dormant"), tr("5 min"), tr("10 min"), tr("20 min"), tr("30 min"), tr("1 hour"), tr("2 hours"), tr("4 hours") }; ui->comboBox_sleepTime->addItems(sleepTime); ui->comboBox_lockDevice->addItem(tr("Not locked")); ui->comboBox_lockDevice->addItem(tr("Lock")); ui->lineEdit_vid->setReadOnly(true); ui->lineEdit_pid->setReadOnly(true); } void MainWindow::initTableWidgetUi() { ui->tableWidget->resizeRowsToContents(); ui->tableWidget->setColumnCount(8); ui->tableWidget->horizontalHeader()->setDefaultSectionSize(250); ui->tableWidget->setColumnWidth(5, 200); ui->tableWidget->setColumnWidth(6, 100); ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); QStringList header; header << tr("selected") << tr("Test ID") << tr("Test items") << tr("Test station") << tr("Test type") << tr("Test content") << tr("resolution") << tr("correct date"); ui->tableWidget->setHorizontalHeaderLabels(header); QFont font = ui->tableWidget->horizontalHeader()->font(); font.setBold(true); ui->tableWidget->horizontalHeader()->setFont(font); ui->tableWidget->horizontalHeader()->setStretchLastSection(true); ui->tableWidget->verticalHeader()->setDefaultSectionSize(10); ui->tableWidget->setFrameShape(QFrame::NoFrame); ui->tableWidget->setShowGrid(true); ui->tableWidget->verticalHeader()->setVisible(false); ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); ui->tableWidget->horizontalHeader()->setFixedHeight(30); ui->tableWidget->clearContents(); ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); ui->tableWidget->setStyleSheet("selection-background-color:rgb(193,210,240)"); } bool MainWindow::loadDefaultItems(DeviceType deviceType) { QString processPath = QCoreApplication::applicationDirPath(); QString baseName; if (deviceType == DeviceType_G100) baseName = "G100"; else if (deviceType == DeviceType_G200) baseName = "G200"; else if (deviceType == DeviceType_G300) baseName = "G300"; else if (deviceType == DeviceType_G306) baseName = "G306"; else if (deviceType == DeviceType_G400) baseName = "G400"; processPath.append("/" + baseName + ".json"); QString filePath = getStdFileName(processPath); QFile file(filePath); if (!file.exists()) return false; AnalysisJson analysisJson(filePath); std::vector list_jsonNode = analysisJson.GetNode(); int count = list_jsonNode.size(); ui->tableWidget->setRowCount(count); for(int i = 0; i < count; ++i) { QTableWidgetItem *check = new QTableWidgetItem(); check->setCheckState(Qt::Unchecked); ui->tableWidget->setItem(i, 0, check); ui->tableWidget->item(i, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); AnalysisJson::json_node node = list_jsonNode[i]; ui->tableWidget->setItem(i, 1, new QTableWidgetItem(QString::number(i+1))); ui->tableWidget->item(i, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui->tableWidget->setItem(i, 2, new QTableWidgetItem(node.title)); ui->tableWidget->item(i, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui->tableWidget->setItem(i, 3, new QTableWidgetItem(node.station)); ui->tableWidget->item(i, 3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui->tableWidget->setItem(i, 4, new QTableWidgetItem(node.is_man ? tr("Manual testing") : tr("automatic testing"))); ui->tableWidget->item(i, 4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui->tableWidget->setItem(i, 5, new QTableWidgetItem(node.desc)); ui->tableWidget->item(i, 5)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); if (node.resolution > 0) { ui->tableWidget->setItem(i, 6, new QTableWidgetItem(QString::number(node.resolution))); ui->tableWidget->item(i, 6)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); } else { ui->tableWidget->setItem(i, 6, new QTableWidgetItem(QString(""))); ui->tableWidget->item(i, 6)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); } node.correctData = node.correctData.trimmed().remove(QChar(0)); if (!node.correctData.isEmpty()) { ui->tableWidget->setItem(i, 7, new QTableWidgetItem(node.correctData)); ui->tableWidget->item(i, 7)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); } else { ui->tableWidget->setItem(i, 7, new QTableWidgetItem(QString(""))); ui->tableWidget->item(i, 7)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); } QTableWidgetItem *item = ui->tableWidget->item(i, 2); QVariant var = QVariant::fromValue(node.name); item->setData(Qt::UserRole, var); } ui->checkBox_selectAll->setChecked(false); ui->checkBox_selectAll->setChecked(true); ui->tableWidget->selectRow(0); return true; } QPair MainWindow::getVidPid(QString oem, QString deviceType) { QString vid; QString pid; if (oem == tr("huagao")) { vid = "0x3072"; if (deviceType == "G100-3399") { pid = "0x0139"; } else if (deviceType == "G200-3399") { pid = "0x0239"; } else if (deviceType == "G300-3288") { pid = "0x0300"; } else if (deviceType == "G306") { pid = "0x0306"; } else if (deviceType == "G400-3399") { pid = "0x0439"; } } else if (oem == tr("microtek")) { vid = "0x05da"; if (deviceType == "G100-3399") { pid = "0x9222"; } else if (deviceType == "G200-3399") { pid = "0x9223"; } else if (deviceType == "G300-3288") { pid = "0"; } else if (deviceType == "G400-3399") { pid = "9220"; } } else if (oem == tr("hanvon")) { vid = "0x2903"; if (deviceType == "G100-3399") { pid = "0x8000"; } else if (deviceType == "G200-3399") { pid = "0x9000"; } else if (deviceType == "G300-3288") { pid = "0x1000"; } else if (deviceType == "G400-3399") { pid = "0x7039"; } } else if (oem == tr("lanxum")) { vid = "0x31c9"; if (deviceType == "G100-3399") { pid = "0x8620"; } else if (deviceType == "G200-3399") { pid = "0x8630"; } else if (deviceType == "G300-3288") { pid = "0x8200"; } else if (deviceType == "G400-3399") { pid = "0x8529"; } } else if (oem == tr("deli")) { vid = "0x300e"; if (deviceType == "G100-3399" || deviceType == "G200-3399") { pid = "0x401c"; } else if (deviceType == "G300-3288") { pid = "0x4015"; } else if (deviceType == "G400-3399") { pid = "0x4019"; } } else if (oem == tr("unis")) { vid = "0x3308"; if (deviceType == "G100-3399" || deviceType == "G200-3399") { pid = "0x0200"; } else if (deviceType == "G300-3288" || deviceType == "G400-3399") { pid = "0"; } } else if (oem == tr("cumtenn")) { vid = "0x3308"; if (deviceType == "G100-3399" || deviceType == "G200-3399") { pid = "0x6006"; } else if (deviceType == "G300-3288") { pid = "0x6005"; } else if (deviceType == "G400-3399") { pid = "0"; } } else if (oem == tr("auge")) { vid = "0x3072"; if (deviceType == "G100-3399") { pid = "0x0130"; } else if (deviceType == "G200-3399") { pid = "0x0230"; } else if (deviceType == "G300-3288") { pid = "0x0330"; } else if (deviceType == "G400-3399") { pid = "0x0430"; } } QPair vidPid; vidPid.first = vid; vidPid.second = pid; return vidPid; } void MainWindow::on_pushButton_generate_clicked() { if (ui->tableWidget->rowCount() == 0) { QMessageBox::information(this, tr("Prompt"), tr("Please add test item")); return; } if (ui->lineEdit_vid->text().isEmpty() || ui->lineEdit_pid->text().isEmpty() || ui->lineEdit_cpuSize->text().isEmpty() || ui->lineEdit_diskSize->text().isEmpty()) { QMessageBox::information(this, tr("Prompt"), tr("Incomplete information, please check")); return; } bool ok = false; if (ui->lineEdit_pid->text().toInt(&ok, 16) == 0) { QMessageBox::information(this, tr("Prompt"), tr("Pid is empty, device not supported")); return; } DeviceInfo deviceInfo; deviceInfo.oem = ui->comboBox_OEM->currentText(); deviceInfo.deviceType = ui->comboBox_deviceType->currentText(); deviceInfo.deviceModel = ui->lineEdit_deviceModel->text(); deviceInfo.fwVersion = ui->lineEdit_fwVersion->text(); deviceInfo.motorVersion = ui->lineEdit_motorVersion->text(); deviceInfo.vid = ui->lineEdit_vid->text(); deviceInfo.pid = ui->lineEdit_pid->text(); deviceInfo.sleepTime = ui->comboBox_sleepTime->currentText(); deviceInfo.speedMode = ui->comboBox_speedMode->currentText(); deviceInfo.cpuSize = ui->lineEdit_cpuSize->text(); deviceInfo.diskSize = ui->lineEdit_diskSize->text(); deviceInfo.lockDevice = ui->comboBox_lockDevice->currentText(); Dialog_myMessageBox dlg(deviceInfo, this); if (!dlg.exec()) return; int sleepTime[8] = { 0, 5, 10, 20, 30, 60, 120, 240 }; QJsonObject globalObject; globalObject.insert("vid-to", ui->lineEdit_vid->text().toInt(&ok, 16)); globalObject.insert("pid-to", ui->lineEdit_pid->text().toInt(&ok, 16)); globalObject.insert("sleep-time", sleepTime[ui->comboBox_sleepTime->currentIndex()]); globalObject.insert("speed-mode", ui->comboBox_speedMode->currentText().toInt()); globalObject.insert("cpu-size", ui->lineEdit_cpuSize->text().toInt()); globalObject.insert("disk-size", ui->lineEdit_diskSize->text().toInt()); globalObject.insert("lock-device", ui->comboBox_lockDevice->currentIndex() == 0 ? false : true); if (!ui->lineEdit_deviceModel->text().isEmpty()) globalObject.insert("device-model", ui->lineEdit_deviceModel->text()); if (!ui->lineEdit_fwVersion->text().isEmpty()) globalObject.insert("firmware-version", ui->lineEdit_fwVersion->text()); if (!ui->lineEdit_motorVersion->text().isEmpty()) globalObject.insert("motor-version", ui->lineEdit_motorVersion->text()); QJsonObject json; json.insert("global", QJsonValue(globalObject)); QJsonObject testItemObject; int count = ui->tableWidget->rowCount(); for (int i = 0; i < count; i++) { QTableWidgetItem *item = ui->tableWidget->item(i, 0); if (item->checkState() == Qt::Unchecked) continue; QString name = ui->tableWidget->item(i, 2)->data(Qt::UserRole).value(); testItemObject.insert("name", name); if (!ui->tableWidget->item(i, 6)->text().isEmpty()) { testItemObject.insert("resolution", ui->tableWidget->item(i, 6)->text().toInt()); } if (!ui->tableWidget->item(i, 7)->text().isEmpty()) { testItemObject.insert("dynamic-correct-data", ui->tableWidget->item(i, 7)->text()); } testItemObject.insert("title", ui->tableWidget->item(i, 2)->text()); testItemObject.insert("station", ui->tableWidget->item(i, 3)->text()); testItemObject.insert("man", ui->tableWidget->item(i, 4)->text() == tr("automatic testing") ? false : true); testItemObject.insert("desc", ui->tableWidget->item(i, 5)->text()); json.insert(QString::number(i + 1), QJsonValue(testItemObject)); } QJsonDocument doc; doc.setObject(json); QString fileName = QFileDialog::getSaveFileName(this, tr("Select profile path"), "", tr("Json(*.json)")); if (fileName.isEmpty()) return; if (!fileName.endsWith(".json")) fileName.append(".json"); QFile file(fileName); if (file.open(QIODevice::WriteOnly)) { file.write(doc.toJson()); file.close(); QMessageBox::information(this, tr("Prompt"), tr("Successfully generated")); } else { QMessageBox::information(this, tr("Prompt"), tr("Generate filed")); } } void MainWindow::on_tableWidget_itemClicked(QTableWidgetItem *item) { int row = item->row(); QTableWidgetItem *item2 = ui->tableWidget->item(row, 0); if (item2->checkState() == Qt::Checked) { ui->tableWidget->selectRow(row); } ui->textBrowser_testContent->setText(ui->tableWidget->item(row, 5)->text()); } void MainWindow::on_checkBox_selectAll_stateChanged(int arg1) { (void)arg1; bool check = ui->checkBox_selectAll->isChecked(); for(int i = 0; i < ui->tableWidget->rowCount(); i++) { QTableWidgetItem *item = ui->tableWidget->item(i, 0); if (item != nullptr) { if (check) item->setCheckState(Qt::Checked); else item->setCheckState(Qt::Unchecked); } } } void MainWindow::on_comboBox_OEM_currentIndexChanged(const QString &arg1) { QPair vidPid = getVidPid(arg1, ui->comboBox_deviceType->currentText()); QString vid = vidPid.first; QString pid = vidPid.second; ui->lineEdit_vid->setText(vid); ui->lineEdit_pid->setText(pid); } void MainWindow::on_comboBox_deviceType_currentIndexChanged(const QString &arg1) { DeviceType deviceType = DeviceType_G100; if (arg1 == "G100-3399") deviceType = DeviceType_G100; else if (arg1 == "G200-3399") deviceType = DeviceType_G200; else if (arg1 == "G300-3288") deviceType = DeviceType_G300; else if (arg1 == "G306") deviceType = DeviceType_G306; else if (arg1 == "G400-3399") deviceType = DeviceType_G400; loadDefaultItems(deviceType); QPair vidPid = getVidPid(ui->comboBox_OEM->currentText(), arg1); QString vid = vidPid.first; QString pid = vidPid.second; ui->lineEdit_vid->setText(vid); ui->lineEdit_pid->setText(pid); } QString MainWindow::getStdFileName(const QString &fileName) { char result[512] = {0}; HGBase_StandardiseFileName(fileName.toStdString().c_str(), result, 512); return result; }