#include "mainwindow.h" #include "ui_mainwindow.h" #include #include "HGImgFmt.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) , m_device(nullptr) { ui->setupUi(this); ui->label_devInfo->clear(); ui->pushButton_scan->setEnabled(false); connect(this, SIGNAL(sane_dev_arrive(QString)), this, SLOT(on_sane_dev_arrive(QString)), Qt::QueuedConnection); connect(this, SIGNAL(sane_dev_remove(QString)), this, SLOT(on_sane_dev_remove(QString)), Qt::QueuedConnection); connect(this, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*)), Qt::DirectConnection); HGLib_InitDevice(DeviceHotPlugEventFunc, this); } MainWindow::~MainWindow() { HGLib_DeinitDevice(); delete ui; } void MainWindow::DeviceHotPlugEventFunc(HGUInt event, const HGChar *deviceName, HGPointer param) { MainWindow* p = (MainWindow*)param; if (HGLIB_DEVHOTPLUG_EVENT_ARRIVE == event) { emit p->sane_dev_arrive(deviceName); } else if (HGLIB_DEVHOTPLUG_EVENT_REMOVE == event) { emit p->sane_dev_remove(deviceName); } } void MainWindow::DeviceScanEventFunc(HGLibDevice device, HGUInt event, HGInt operateCode, const HGChar *info, HGPointer param) { MainWindow *p = (MainWindow*)param; p->addContent(info); } void MainWindow::DeviceScanImageFunc(HGLibDevice device, HGLibImage image, HGPointer param) { MainWindow *p = (MainWindow*)param; emit p->newImage(image); int id = HGLib_GetDevicePageId(device); char info[64]; sprintf(info, "Page id: %d", id); p->addContent(info); } void MainWindow::on_sane_dev_arrive(QString devName) { int idx = -1; int count = ui->comboDevList->count(); for (int i = 0; i < count; ++i) { QString name = ui->comboDevList->itemText(i); if (name == devName) { idx = i; break; } } if (-1 == idx) { ui->comboDevList->addItem(devName); } } void MainWindow::on_sane_dev_remove(QString devName) { int idx = -1; int count = ui->comboDevList->count(); for (int i = 0; i < count; ++i) { QString name = ui->comboDevList->itemText(i); if (name == devName) { idx = i; break; } } if (-1 != idx) { QString info = tr("The device %1 is disconnected.").arg(devName); ui->label_devInfo->setText(info); addContent(info); ui->comboDevList->removeItem(idx); } } void MainWindow::on_newImage(void *image) { } void MainWindow::on_comboDevList_currentIndexChanged(int index) { if (-1 != index) { if (m_device != nullptr) { HGLib_CloseDevice(m_device); ui->label_devInfo->clear(); ui->pushButton_scan->setEnabled(false); } QString name = ui->comboDevList->itemText(index); m_device = HGLib_OpenDevice(name.toStdString().c_str()); if (m_device != nullptr) { QString info = tr("The device %1 is open.").arg(name); ui->label_devInfo->setText(info); addContent(info); ui->pushButton_scan->setEnabled(true); } else { QString info = tr("The device %1 open failed.").arg(name); addContent(info); } } } void MainWindow::on_pushButton_scan_clicked() { HGLib_StartDeviceScan(m_device, DeviceScanEventFunc, this, DeviceScanImageFunc, this); } void MainWindow::addContent(QString content) { ui->textBrowser->insertPlainText(QDateTime::currentDateTime().toString("[yyyy-MM-dd hh:mm] ") + content + "\n"); ui->textBrowser->moveCursor(QTextCursor::End); ui->textBrowser->setTextColor(Qt::black); }