code_production/app/HGPdtJsonTool/mainwindow.cpp

320 lines
12 KiB
C++
Raw Normal View History

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QFile>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
#include <QMessageBox>
#include "analysisjson.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
, m_curIndex(0)
{
ui->setupUi(this);
initDeviceInfo();
initTableWidgetUi();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initDeviceInfo()
{
QStringList oemName{ tr("huagao"), tr("microtek"), tr("hanvon"), tr("lanxum"), tr("deli"), tr("unis"), tr("cumtenn"), tr("nuetral") };
ui->comboBox_OEM->addItems(oemName);
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"));
QStringList testStation{ tr("Burn"), tr("Initial inspection"), tr("Image inspection") };
ui->comboBox_testStation->addItems(testStation);
QStringList testType{ tr("automatic testing"), tr("Manual testing") };
ui->comboBox_testType->addItems(testType);
QString prompt(tr("Fill in hexadecimal format, such as '0xFFFF'"));
ui->lineEdit_vid->setToolTip(prompt);
ui->lineEdit_pid->setToolTip(prompt);
ui->lineEdit_vid->setPlaceholderText(prompt);
ui->lineEdit_pid->setPlaceholderText(prompt);
}
void MainWindow::initTableWidgetUi()
{
ui->tableWidget->resizeRowsToContents();
ui->tableWidget->setColumnCount(7);
ui->tableWidget->horizontalHeader()->setDefaultSectionSize(200);
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
QStringList header;
header << tr("selected") << tr("ID") << tr("Test ID") << tr("Test items") << tr("Test station") << tr("Test type") << tr("Test content");
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)");
}
void MainWindow::updateTableWidget()
{
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
{
ui->tableWidget->setItem(i, 1, new QTableWidgetItem(QString::number(i + 1)));
}
}
void MainWindow::on_pushButton_generate_clicked()
{
if (ui->tableWidget->rowCount() == 0)
{
QMessageBox::information(this, tr("Prompt"), tr("Please add test item"));
return;
}
int sleepTime[8] = { 0, 5, 10, 20, 30, 60, 120, 240 };
bool ok = false;
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_deviceModle->text().isEmpty())
globalObject.insert("device-model", ui->lineEdit_deviceModle->text());
if (!ui->lineEdit_fwVersion->text().isEmpty())
globalObject.insert("firmware-version", ui->lineEdit_fwVersion->text());
QJsonObject json;
json.insert("global", QJsonValue(globalObject));
QJsonObject testItemObject;
int count = ui->tableWidget->rowCount();
for (int i = 0; i < count; i++)
{
testItemObject.insert("name", ui->tableWidget->item(i, 2)->text());
testItemObject.insert("title", ui->tableWidget->item(i, 3)->text());
testItemObject.insert("station", ui->tableWidget->item(i, 4)->text());
testItemObject.insert("man", ui->tableWidget->item(i, 5)->text() == tr("automatic testing") ? false : true);
testItemObject.insert("desc", ui->tableWidget->item(i, 6)->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_pushButton_addTestItem_clicked()
{
if (ui->lineEdit_vid->text().isEmpty() || ui->lineEdit_pid->text().isEmpty() || ui->lineEdit_cpuSize->text().isEmpty() ||
ui->lineEdit_diskSize->text().isEmpty() || ui->lineEdit_testID->text().isEmpty() || ui->lineEdit_testItem->text().isEmpty())
{
QMessageBox::information(this, tr("Prompt"), tr("Incomplete information, please check"));
return;
}
ui->tableWidget->setRowCount(m_curIndex + 1);
QTableWidgetItem *check = new QTableWidgetItem();
check->setCheckState(Qt::Unchecked);
ui->tableWidget->setItem(m_curIndex, 0, check);
ui->tableWidget->item(m_curIndex, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableWidget->setItem(m_curIndex, 1, new QTableWidgetItem(QString::number(m_curIndex + 1)));
ui->tableWidget->item(m_curIndex, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableWidget->setItem(m_curIndex, 2, new QTableWidgetItem(ui->lineEdit_testID->text()));
ui->tableWidget->item(m_curIndex, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableWidget->setItem(m_curIndex, 3, new QTableWidgetItem(ui->lineEdit_testItem->text()));
ui->tableWidget->item(m_curIndex, 3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableWidget->setItem(m_curIndex, 4, new QTableWidgetItem(ui->comboBox_testStation->currentText()));
ui->tableWidget->item(m_curIndex, 4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableWidget->setItem(m_curIndex, 5, new QTableWidgetItem(ui->comboBox_testType->currentText()));
ui->tableWidget->item(m_curIndex, 5)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableWidget->setItem(m_curIndex, 6, new QTableWidgetItem(ui->textEdit_testContent->toPlainText()));
ui->tableWidget->item(m_curIndex, 6)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableWidget->selectRow(m_curIndex);
m_curIndex++;
}
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->lineEdit_testID->setText(ui->tableWidget->item(row, 2)->text());
ui->lineEdit_testItem->setText(ui->tableWidget->item(row, 3)->text());
ui->comboBox_testStation->setCurrentText(ui->tableWidget->item(row, 4)->text());
ui->comboBox_testType->setCurrentText(ui->tableWidget->item(row, 5)->text());
ui->textEdit_testContent->setText(ui->tableWidget->item(row, 6)->text());
}
void MainWindow::on_pushButton_import_clicked()
{
QString filePath = QFileDialog::getOpenFileName(this, tr("Open File"), "", tr("Json(*.json)"));
if (filePath.isEmpty())
return;
AnalysisJson analysisJson(filePath);
AnalysisJson::json_global jsonGlobal = analysisJson.GetGlobal();
ui->lineEdit_vid->setText(QString("0x") + QString::number(jsonGlobal.vid_to, 16));
ui->lineEdit_pid->setText(QString("0x") + QString::number(jsonGlobal.pid_to, 16));
ui->lineEdit_diskSize->setText(QString::number(jsonGlobal.disk_size));
ui->lineEdit_cpuSize->setText(QString::number(jsonGlobal.cpu_size));
ui->comboBox_lockDevice->setCurrentIndex(jsonGlobal.lock_device ? 1 : 0);
if (!jsonGlobal.device_model.isEmpty())
{
ui->lineEdit_deviceModle->setText(jsonGlobal.device_model);
}
if(!jsonGlobal.firmware_version.isEmpty())
{
ui->lineEdit_fwVersion->setText(jsonGlobal.firmware_version);
}
int sleepTime[8] = { 0, 5, 10, 20, 30, 60, 120, 240 };
for (int i = 0; i < sizeof(sleepTime) / sizeof(0); i++)
{
if (jsonGlobal.sleep_time == sleepTime[i])
ui->comboBox_sleepTime->setCurrentIndex(i);
}
for(int i = 0; i < ui->comboBox_speedMode->count(); i++)
{
if (jsonGlobal.speed_mode == ui->comboBox_speedMode->itemText(i).toInt())
ui->comboBox_speedMode->setCurrentText(QString::number(jsonGlobal.speed_mode));
}
std::vector<AnalysisJson::json_node> list_jsonNode = analysisJson.GetNode();
int count = list_jsonNode.size();
ui->tableWidget->setRowCount(count);
m_curIndex = 0;
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.name));
ui->tableWidget->item(i, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableWidget->setItem(i, 3, new QTableWidgetItem(node.title));
ui->tableWidget->item(i, 3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableWidget->setItem(i, 4, new QTableWidgetItem(node.station));
ui->tableWidget->item(i, 4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableWidget->setItem(i, 5, new QTableWidgetItem(node.is_man ? tr("Manual testing") : tr("automatic testing")));
ui->tableWidget->item(i, 5)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableWidget->setItem(i, 6, new QTableWidgetItem(node.desc));
ui->tableWidget->item(i, 6)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
m_curIndex++;
}
ui->tableWidget->selectRow(0);
}
void MainWindow::on_pushButton_delete_clicked()
{
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
{
QTableWidgetItem *item = ui->tableWidget->item(i, 0);
if (item != nullptr)
{
if (item->checkState() == Qt::Checked)
{
ui->tableWidget->removeRow(item->row());
i = 0;
}
}
}
updateTableWidget();
}
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);
}
}
}