code_app/modules/saneui/dialog_device_select.cpp

88 lines
1.9 KiB
C++

#include "dialog_device_select.h"
#include "ui_dialog_device_select.h"
#include <QMessageBox>
Dialog_Device_Select::Dialog_Device_Select(const SANEAPI* saneApi, const char **devNames, QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog_Device_Select)
{
ui->setupUi(this);
memcpy(&m_saneAPI, saneApi, sizeof(SANEAPI));
m_devHandle = nullptr;
m_devName.clear();
m_vDevName.clear();
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
if (nullptr == devNames)
{
const SANE_Device** device_list;
if (SANE_STATUS_GOOD == saneApi->sane_get_devices_api(&device_list, SANE_TRUE))
{
const SANE_Device** p;
for (p = device_list; *p != nullptr; ++p)
{
m_vDevName.push_back((*p)->name);
ui->listWidget->addItem((*p)->name);
}
}
}
else
{
const char **p = devNames;
while (*p != nullptr)
{
m_vDevName.push_back(*p);
ui->listWidget->addItem(*p);
++p;
}
}
if (!m_vDevName.empty())
{
ui->listWidget->setCurrentRow(0);
}
}
Dialog_Device_Select::~Dialog_Device_Select()
{
delete ui;
}
SANE_Handle Dialog_Device_Select::GetDevHandle()
{
return m_devHandle;
}
std::string Dialog_Device_Select::GetDevName()
{
return m_devName;
}
void Dialog_Device_Select::on_pushButton_OK_clicked()
{
int index = ui->listWidget->currentRow();
if (index < 0)
{
return;
}
SANE_Handle dev = nullptr;
SANE_Status ret = m_saneAPI.sane_open_api(m_vDevName[index].c_str(), &dev);
if (SANE_STATUS_GOOD != ret)
{
QMessageBox::information(this, tr("tips"), QString::fromUtf8(m_saneAPI.sane_strstatus_api(ret)));
return;
}
m_devHandle = dev;
m_devName = m_vDevName[index];
accept();
}
void Dialog_Device_Select::on_pushButton_Cancel_clicked()
{
reject();
}