#include "form_burnmode.h" #include "ui_form_burnmode.h" #include "dialog_setburnsn.h" #include "hgscanner.h" #include "mainwindow.h" #include #include #include 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(QString)), this, SLOT(on_testResult(QString)), 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); // 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->columnCount(); 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(); delete devManager; ui->tableWidget->removeRow(i); m_curIndex--; break; } } } } void Form_BurnMode::on_testResult(QString text) { if (!text.isEmpty()) QMessageBox::information(this, tr("tips"), text); 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::on_cbox_selectAll_stateChanged(int arg1) { (void)arg1; bool check = ui->cbox_selectAll->isChecked(); for(int i = 0; i < ui->tableWidget->columnCount(); 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() { ui->cbox_selectAll->setChecked(true); for(int i = 0; i < ui->tableWidget->columnCount(); i++) { QTableWidgetItem *item = ui->tableWidget->item(i, 1); if (item != nullptr && Qt::Checked == item->checkState()) { DeviceManager *devManager = (DeviceManager*)item->data(Qt::UserRole).value(); devManager->setBurnMode(); } } } void Form_BurnMode::on_pbtn_setSn_clicked() { int select = 0; for(int i = 0; i < ui->tableWidget->columnCount(); 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->columnCount(); 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(); devManager->setSn(dlg.getSn()); break; } } } } } DeviceManager::DeviceManager(class MainWindow *mainwnd, class Form_BurnMode *burnMode, SANE_Handle handle, const QString & devName, const QString & sn) { m_handle = handle; m_devName = devName; m_sn = sn; m_mainwnd = mainwnd; m_burnMode = burnMode; m_hg = new hgscanner(nullptr, m_burnMode, 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"; func_test_go(HGPDTTOOLDB_NAME_REBOOT_DEVICE, p, m_hg); m_mainwnd->addTestingRef(); } 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(); func_test_go(WRITE_CFG_NAME, (const wchar_t*)p, m_hg); m_mainwnd->addTestingRef(); delete p; } 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); } }