144 lines
3.7 KiB
C++
144 lines
3.7 KiB
C++
#include "mainwindow.h"
|
|
#include "ui_mainwindow.h"
|
|
#include <QDateTime>
|
|
#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);
|
|
}
|