code_app/app/libtest/mainwindow.cpp

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);
}