code_production/app/HGProductionTool/form_burnmode.cpp

361 lines
10 KiB
C++

#include "form_burnmode.h"
#include "ui_form_burnmode.h"
#include "dialog_setburnsn.h"
#include "hgscanner.h"
#include "mainwindow.h"
#include "analysisjson.h"
#include "base/HGBase.h"
#include <QMessageBox>
#include <QLineEdit>
#include <QInputDialog>
Form_BurnMode::Form_BurnMode(class MainWindow *mainwnd, QWidget *parent) :
QWidget(parent),
m_curIndex(0),
m_mainwnd(mainwnd),
ui(new Ui::Form_BurnMode)
{
ui->setupUi(this);
connect(this, SIGNAL(testResult(bool)), this, SLOT(on_testResult(bool)), Qt::QueuedConnection);
initTableWidget();
}
Form_BurnMode::~Form_BurnMode()
{
delete ui;
}
void Form_BurnMode::addDevice(DeviceManager *devManager)
{
ui->tableWidget->setRowCount(m_curIndex + 1);
ui->tableWidget->setItem(m_curIndex, 0, new QTableWidgetItem(QString::number(m_curIndex + 1)));
ui->tableWidget->item(m_curIndex, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
QTableWidgetItem *check = new QTableWidgetItem();
check->setCheckState(Qt::Unchecked);
ui->tableWidget->setItem(m_curIndex, 1, check);
ui->tableWidget->item(m_curIndex, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableWidget->setItem(m_curIndex, 2, new QTableWidgetItem(devManager->getDevName()));
ui->tableWidget->item(m_curIndex, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableWidget->setItem(m_curIndex, 3, new QTableWidgetItem(devManager->getSn()));
ui->tableWidget->item(m_curIndex, 3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
QTableWidgetItem *item = ui->tableWidget->item(m_curIndex, 1);
QVariant var = QVariant::fromValue((void*)devManager);
item->setData(Qt::UserRole, var);
updatetablewidget();
// for(int i = 0; i < ui->tableWidget->rowCount(); i++)
// {
// QTableWidgetItem *item = ui->tableWidget->item(i, 3);
// if (item != nullptr)
// item->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled);
// }
m_curIndex++;
}
void Form_BurnMode::deleteDevice(QString devName)
{
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
{
QTableWidgetItem *item = ui->tableWidget->item(i, 1);
QTableWidgetItem *item2 = ui->tableWidget->item(i, 2);
if (devName!= nullptr && item != nullptr)
{
if (devName == item2->text())
{
DeviceManager *devManager = (DeviceManager*)item->data(Qt::UserRole).value<void*>();
delete devManager;
ui->tableWidget->removeRow(i);
m_curIndex--;
break;
}
}
}
updatetablewidget();
}
void Form_BurnMode::on_testResult(bool setStatus)
{
m_mainwnd->releaseTesting();
}
void Form_BurnMode::initTableWidget()
{
ui->tableWidget->resizeRowsToContents();
ui->tableWidget->setColumnCount(4);
ui->tableWidget->horizontalHeader()->setDefaultSectionSize(200);
// ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
ui->tableWidget->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
QStringList header;
header<< tr("ID") << tr("selected") << tr("device") << tr("serialNum");
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();
}
void Form_BurnMode::updatetablewidget()
{
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
{
ui->tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i + 1)));
}
}
void Form_BurnMode::on_cbox_selectAll_stateChanged(int arg1)
{
(void)arg1;
bool check = ui->cbox_selectAll->isChecked();
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
{
QTableWidgetItem *item = ui->tableWidget->item(i, 1);
if (item != nullptr)
{
if (check)
item->setCheckState(Qt::Checked);
else
item->setCheckState(Qt::Unchecked);
}
}
}
void Form_BurnMode::on_pbtn_burn_clicked()
{
int select = 0;
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
{
QTableWidgetItem *item = ui->tableWidget->item(i, 1);
if (item != nullptr && Qt::Checked == item->checkState())
{
select++;
}
}
if (select == 0)
{
QMessageBox::information(this, tr("tips"), tr("Please check a devices at least"));
return;
}
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
{
QTableWidgetItem *item = ui->tableWidget->item(i, 1);
if (item != nullptr && Qt::Checked == item->checkState())
{
DeviceManager *devManager = (DeviceManager*)item->data(Qt::UserRole).value<void*>();
devManager->setBurnMode();
}
}
}
//void Form_BurnMode::on_pbtn_setSn_clicked()
//{
// int select = 0;
// for(int i = 0; i < ui->tableWidget->rowCount(); i++)
// {
// QTableWidgetItem *item = ui->tableWidget->item(i, 1);
// if (item != nullptr && Qt::Checked == item->checkState())
// {
// select++;
// }
// }
// if (select == 0)
// {
// QMessageBox::information(this, tr("tips"), tr("Please check a devices to set sn at least"));
// return;
// }
// else if (select > 1)
// {
// QMessageBox::information(this, tr("tips"), tr("Please check single devices to set sn"));
// return;
// }
// else if (select == 1)
// {
// for(int i = 0; i < ui->tableWidget->rowCount(); i++)
// {
// QTableWidgetItem *item = ui->tableWidget->item(i, 1);
// QTableWidgetItem *item2 = ui->tableWidget->item(i, 3);
// if (item != nullptr && Qt::Checked == item->checkState())
// {
// Dialog_SetBurnSn dlg(item2->text(), this);
// if (dlg.exec())
// {
// DeviceManager *devManager = (DeviceManager*)item->data(Qt::UserRole).value<void*>();
// devManager->setSn(dlg.getSn());
// item2->setText(devManager->getUpdatedSn());
// break;
// }
// }
// }
// }
//}
DeviceManager::DeviceManager(class MainWindow *mainwnd, HGPdtToolDbUserMgr pdtToolDbuserMgr, class Form_BurnMode *burnMode,
SANE_Handle handle, const QString & devName, const QString & sn, const QString &devType)
{
m_mainwnd = mainwnd;
m_pdtToolDbuserMgr = pdtToolDbuserMgr;
m_burnMode = burnMode;
m_handle = handle;
m_devName = devName;
m_sn = sn;
m_devType = devType;
m_hg = new hgscanner(nullptr, m_burnMode, nullptr, m_handle);
}
DeviceManager::~DeviceManager()
{
delete m_hg;
m_hg = nullptr;
sane_close(m_handle);
}
QString DeviceManager::getDevName()
{
return m_devName;
}
QString DeviceManager::getSn()
{
return m_sn;
}
void DeviceManager::setBurnMode()
{
const wchar_t *p = L"1";
m_mainwnd->addTestingRef();
func_test_go(HGPDTTOOLDB_NAME_REBOOT_DEVICE, p, m_hg);
}
void DeviceManager::setSn(QString sn)
{
LPWRITECFG p = new WRITECFG;
std::wstring sn2 = sn.toStdWString();
p->cat = WRITE_CAT_SERIALNUM;
p->val = (void*)sn2.c_str();
m_mainwnd->addTestingRef();
func_test_go(WRITE_CFG_NAME, (const wchar_t*)p, m_hg);
setGlobalCfg();
delete p;
}
QString DeviceManager::getUpdatedSn()
{
return m_mainwnd->getDevSn(m_handle);
}
void DeviceManager::setGlobalCfg()
{
HGChar cfgPath[512] = {0};
HGBase_GetConfigPath(cfgPath, 512);
HGBase_CreateDir(cfgPath);
strcat(cfgPath, m_devType.toStdString().c_str());
strcat(cfgPath, ".json");
HGPdtToolDb_DownloadFile(m_pdtToolDbuserMgr, m_devType.toStdString().c_str(), cfgPath);
AnalysisJson analysisJson(QString::fromStdString(cfgPath));
assert(nullptr != m_hg);
AnalysisJson::json_global jsonGlobal = analysisJson.GetGlobal();
LPWRITECFG lp = new WRITECFG;
VIDPID vidpid;
vidpid.VID = jsonGlobal.vid_to;
vidpid.PID = jsonGlobal.pid_to;
int vidpidValue = vidpid.Value;
lp->cat = WRITE_CAT_VID_PID;
lp->val = (void*)&vidpidValue;
m_mainwnd->addTestingRef();
func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp, m_hg);
int speedMode = jsonGlobal.speed_mode ;
lp->cat = WRITE_CAT_SPEED;
lp->val = (void*)&speedMode;
m_mainwnd->addTestingRef();
func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp, m_hg);
int sleepTime = jsonGlobal.sleep_time;
lp->cat = WRITE_CAT_SLEEP;
lp->val = (void*)&sleepTime;
m_mainwnd->addTestingRef();
func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp, m_hg);
delete lp;
}
void Form_BurnMode::on_tableWidget_itemDoubleClicked(QTableWidgetItem *item)
{
int row = item->row();
QTableWidgetItem *item2 = ui->tableWidget->item(row, 1);
if (item2->checkState() == Qt::Checked)
{
item2->setCheckState(Qt::Unchecked);
}
else
{
item2->setCheckState(Qt::Checked);
}
}
void Form_BurnMode::on_pbtn_close_clicked()
{
int select = 0;
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
{
QTableWidgetItem *item = ui->tableWidget->item(i, 1);
if (item != nullptr && Qt::Checked == item->checkState())
{
select++;
}
}
if (select == 0)
{
QMessageBox::information(this, tr("tips"), tr("Please check a devices at least"));
return;
}
int rowCount = ui->tableWidget->rowCount();
for (int i = rowCount - 1; i >= 0; --i)
{
QTableWidgetItem *item = ui->tableWidget->item(i, 1);
if (item != nullptr && Qt::Checked == item->checkState())
{
DeviceManager *devManager = (DeviceManager*)item->data(Qt::UserRole).value<void*>();
delete devManager;
ui->tableWidget->removeRow(i);
m_curIndex--;
}
}
updatetablewidget();
}