修改twainuser接口,将打开twain源和打开设备分开处理
This commit is contained in:
parent
559851ebab
commit
7be7e50272
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
#if defined(HG_CMP_MSC)
|
#if defined(HG_CMP_MSC)
|
||||||
|
|
||||||
DeviceUserMgr::DeviceUserMgr(QString password, QWidget *wnd)
|
DeviceUserMgr::DeviceUserMgr(const QString &password, QWidget *wnd)
|
||||||
{
|
{
|
||||||
m_password = password;
|
m_password = password;
|
||||||
m_wnd = wnd;
|
m_wnd = wnd;
|
||||||
|
@ -23,7 +23,7 @@ DeviceUserMgr::~DeviceUserMgr()
|
||||||
class DeviceUser* DeviceUserMgr::OpenDeviceUser()
|
class DeviceUser* DeviceUserMgr::OpenDeviceUser()
|
||||||
{
|
{
|
||||||
HGTwainDS ds = nullptr;
|
HGTwainDS ds = nullptr;
|
||||||
HGTwain_OpenSelectedDSEx(m_twainDSM, &ds);
|
HGTwain_CreateSelectedDSEx(m_twainDSM, &ds);
|
||||||
if (nullptr == ds)
|
if (nullptr == ds)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return new DeviceUser(m_wnd, ds, m_password);
|
return new DeviceUser(m_wnd, ds, m_password);
|
||||||
|
@ -32,13 +32,13 @@ class DeviceUser* DeviceUserMgr::OpenDeviceUser()
|
||||||
DeviceUser *DeviceUserMgr::OpenDefaultDeviceUser()
|
DeviceUser *DeviceUserMgr::OpenDefaultDeviceUser()
|
||||||
{
|
{
|
||||||
HGTwainDS ds = nullptr;
|
HGTwainDS ds = nullptr;
|
||||||
HGTwain_OpenDefaultDS(m_twainDSM, &ds);
|
HGTwain_CreateDefaultDS(m_twainDSM, &ds);
|
||||||
if (nullptr == ds)
|
if (nullptr == ds)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return new DeviceUser(m_wnd, ds, m_password);
|
return new DeviceUser(m_wnd, ds, m_password);
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceUser::DeviceUser(QWidget *wnd, HGTwainDS ds, QString password)
|
DeviceUser::DeviceUser(QWidget *wnd, HGTwainDS ds, const QString &password)
|
||||||
{
|
{
|
||||||
m_wnd = wnd;
|
m_wnd = wnd;
|
||||||
m_twainDS = ds;
|
m_twainDS = ds;
|
||||||
|
@ -48,9 +48,20 @@ DeviceUser::DeviceUser(QWidget *wnd, HGTwainDS ds, QString password)
|
||||||
DeviceUser::~DeviceUser()
|
DeviceUser::~DeviceUser()
|
||||||
{
|
{
|
||||||
HGTwain_CloseDS(m_twainDS);
|
HGTwain_CloseDS(m_twainDS);
|
||||||
|
HGTwain_DestroyDS(m_twainDS);
|
||||||
m_twainDS = nullptr;
|
m_twainDS = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HGResult DeviceUser::Open()
|
||||||
|
{
|
||||||
|
return HGTwain_OpenDS(m_twainDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
HGResult DeviceUser::Close()
|
||||||
|
{
|
||||||
|
return HGTwain_CloseDS(m_twainDS);
|
||||||
|
}
|
||||||
|
|
||||||
QString DeviceUser::GetName()
|
QString DeviceUser::GetName()
|
||||||
{
|
{
|
||||||
HGChar devName[256] = {0};
|
HGChar devName[256] = {0};
|
||||||
|
@ -147,11 +158,11 @@ void HGAPI DeviceUser::DSImageFunc(HGTwainDS ds, HGImage image, HGPointer param)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
DeviceUserMgr::DeviceUserMgr(QString password, QWidget *wnd)
|
DeviceUserMgr::DeviceUserMgr(const QString &password, QWidget *wnd)
|
||||||
{
|
{
|
||||||
m_wnd = wnd;
|
m_wnd = wnd;
|
||||||
m_saneMgr = nullptr;
|
|
||||||
m_password = password;
|
m_password = password;
|
||||||
|
m_saneMgr = nullptr;
|
||||||
HGSane_CreateManager(&m_saneMgr);
|
HGSane_CreateManager(&m_saneMgr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,38 +179,7 @@ class DeviceUser* DeviceUserMgr::OpenDeviceUser()
|
||||||
if (nullptr == source)
|
if (nullptr == source)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
HGUInt devCount = 0;
|
return new DeviceUser(m_wnd, source, m_password);
|
||||||
HGSane_GetDeviceCount(source, &devCount);
|
|
||||||
if (0 == devCount)
|
|
||||||
{
|
|
||||||
HGSane_CloseSource(source);
|
|
||||||
QMessageBox::information(m_wnd, tr("tips"), tr("no device"));
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
// else if (1 == devCount)
|
|
||||||
// {
|
|
||||||
// HGChar errInfo[256];
|
|
||||||
// HGSaneDevice dev = nullptr;
|
|
||||||
// HGSane_OpenDevice(source, 0, &dev, errInfo, 256);
|
|
||||||
// if (nullptr == dev)
|
|
||||||
// {
|
|
||||||
// HGSane_CloseSource(source);
|
|
||||||
// QMessageBox::information(m_wnd, tr("tips"), QString::fromUtf8(errInfo));
|
|
||||||
// return nullptr;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return new DeviceUser(m_wnd, source, dev, m_password);
|
|
||||||
// }
|
|
||||||
|
|
||||||
HGSaneDevice dev = nullptr;
|
|
||||||
HGSane_OpenSelectedDevice(source, m_wnd, &dev);
|
|
||||||
if (nullptr == dev)
|
|
||||||
{
|
|
||||||
HGSane_CloseSource(source);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new DeviceUser(m_wnd, source, dev, m_password);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceUser *DeviceUserMgr::OpenDefaultDeviceUser()
|
DeviceUser *DeviceUserMgr::OpenDefaultDeviceUser()
|
||||||
|
@ -209,45 +189,14 @@ DeviceUser *DeviceUserMgr::OpenDefaultDeviceUser()
|
||||||
if (nullptr == source)
|
if (nullptr == source)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
HGUInt devCount = 0;
|
return new DeviceUser(m_wnd, source, m_password);
|
||||||
HGSane_GetDeviceCount(source, &devCount);
|
|
||||||
if (0 == devCount)
|
|
||||||
{
|
|
||||||
HGSane_CloseSource(source);
|
|
||||||
QMessageBox::information(m_wnd, tr("tips"), tr("no device"));
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
else if (1 == devCount)
|
|
||||||
{
|
|
||||||
HGChar errInfo[256];
|
|
||||||
HGSaneDevice dev = nullptr;
|
|
||||||
HGSane_OpenDevice(source, 0, &dev, errInfo, 256);
|
|
||||||
if (nullptr == dev)
|
|
||||||
{
|
|
||||||
HGSane_CloseSource(source);
|
|
||||||
QMessageBox::information(m_wnd, tr("tips"), QString::fromUtf8(errInfo));
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new DeviceUser(m_wnd, source, dev, m_password);
|
|
||||||
}
|
|
||||||
|
|
||||||
HGSaneDevice dev = nullptr;
|
|
||||||
HGSane_OpenSelectedDevice(source, m_wnd, &dev);
|
|
||||||
if (nullptr == dev)
|
|
||||||
{
|
|
||||||
HGSane_CloseSource(source);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new DeviceUser(m_wnd, source, dev, m_password);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceUser::DeviceUser(QWidget *wnd, HGSaneSource source, HGSaneDevice dev, QString password)
|
DeviceUser::DeviceUser(QWidget *wnd, HGSaneSource source, const QString &password)
|
||||||
{
|
{
|
||||||
m_wnd = wnd;
|
m_wnd = wnd;
|
||||||
m_source = source;
|
m_source = source;
|
||||||
m_saneDev = dev;
|
m_saneDev = nullptr;
|
||||||
m_password = password;
|
m_password = password;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,6 +208,28 @@ DeviceUser::~DeviceUser()
|
||||||
m_source = nullptr;
|
m_source = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HGResult DeviceUser::Open()
|
||||||
|
{
|
||||||
|
if (nullptr != m_saneDev)
|
||||||
|
{
|
||||||
|
return HGSANE_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return HGSane_OpenSelectedDevice(m_source, m_wnd, &m_saneDev);
|
||||||
|
}
|
||||||
|
|
||||||
|
HGResult DeviceUser::Close()
|
||||||
|
{
|
||||||
|
if (nullptr == m_saneDev)
|
||||||
|
{
|
||||||
|
return HGSANE_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
HGSane_CloseDevice(m_saneDev);
|
||||||
|
m_saneDev = nullptr;
|
||||||
|
return HGBASE_ERR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
QString DeviceUser::GetName()
|
QString DeviceUser::GetName()
|
||||||
{
|
{
|
||||||
HGChar devName[256];
|
HGChar devName[256];
|
||||||
|
|
|
@ -12,7 +12,7 @@ class DeviceUserMgr : public QObject
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DeviceUserMgr(QString password, QWidget *wnd);
|
DeviceUserMgr(const QString &password, QWidget *wnd);
|
||||||
~DeviceUserMgr();
|
~DeviceUserMgr();
|
||||||
|
|
||||||
// 弹出设备选择对话框,选择twain源
|
// 弹出设备选择对话框,选择twain源
|
||||||
|
@ -30,10 +30,12 @@ class DeviceUser : public QObject
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
friend class DeviceUserMgr;
|
friend class DeviceUserMgr;
|
||||||
DeviceUser(QWidget *wnd, HGTwainDS ds, QString password);
|
DeviceUser(QWidget *wnd, HGTwainDS ds, const QString &password);
|
||||||
public:
|
public:
|
||||||
~DeviceUser();
|
~DeviceUser();
|
||||||
|
|
||||||
|
HGResult Open();
|
||||||
|
HGResult Close();
|
||||||
// 获取设备名字
|
// 获取设备名字
|
||||||
QString GetName();
|
QString GetName();
|
||||||
// 弹出配置对话框
|
// 弹出配置对话框
|
||||||
|
@ -73,7 +75,7 @@ class DeviceUserMgr : public QObject
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DeviceUserMgr(QString password, QWidget *wnd);
|
DeviceUserMgr(const QString &password, QWidget *wnd);
|
||||||
~DeviceUserMgr();
|
~DeviceUserMgr();
|
||||||
|
|
||||||
// 弹出设备选择对话框,选择设备
|
// 弹出设备选择对话框,选择设备
|
||||||
|
@ -91,10 +93,12 @@ class DeviceUser : public QObject
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
friend class DeviceUserMgr;
|
friend class DeviceUserMgr;
|
||||||
DeviceUser(QWidget *wnd, HGSaneSource source, HGSaneDevice dev, QString password);
|
DeviceUser(QWidget *wnd, HGSaneSource source, const QString &password);
|
||||||
public:
|
public:
|
||||||
~DeviceUser();
|
~DeviceUser();
|
||||||
|
|
||||||
|
HGResult Open();
|
||||||
|
HGResult Close();
|
||||||
// 获取设备名字
|
// 获取设备名字
|
||||||
QString GetName();
|
QString GetName();
|
||||||
// 弹出配置对话框
|
// 弹出配置对话框
|
||||||
|
|
|
@ -360,14 +360,22 @@ MainWindow::MainWindow(const QString& appLang, QWidget *parent)
|
||||||
m_devUser = m_devUserMgr->OpenDefaultDeviceUser();
|
m_devUser = m_devUserMgr->OpenDefaultDeviceUser();
|
||||||
if (m_devUser != nullptr)
|
if (m_devUser != nullptr)
|
||||||
{
|
{
|
||||||
m_wndStatusBar->setDeviceStatusInfo(tr("Device %1 is open").arg(m_devUser->GetName()), false);
|
if (HGBASE_ERR_OK == m_devUser->Open())
|
||||||
connect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*)), Qt::DirectConnection);
|
{
|
||||||
connect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()), Qt::QueuedConnection);
|
m_wndStatusBar->setDeviceStatusInfo(tr("Device %1 is open").arg(m_devUser->GetName()), false);
|
||||||
connect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()), Qt::QueuedConnection);
|
connect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*)), Qt::DirectConnection);
|
||||||
|
connect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()), Qt::QueuedConnection);
|
||||||
|
connect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()), Qt::QueuedConnection);
|
||||||
|
|
||||||
#if !defined(HG_CMP_MSC)
|
#if !defined(HG_CMP_MSC)
|
||||||
checkRollerLife();
|
checkRollerLife();
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete m_devUser;
|
||||||
|
m_devUser = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString password = getCfgValue("login", "password", QString(""));
|
QString password = getCfgValue("login", "password", QString(""));
|
||||||
|
@ -4405,29 +4413,36 @@ void MainWindow::on_act_selectDevice_triggered()
|
||||||
m_versionDll->PostUserLogoutInfo(HGVERSION_APPNAME_SCANNER, m_oemName);
|
m_versionDll->PostUserLogoutInfo(HGVERSION_APPNAME_SCANNER, m_oemName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nullptr != m_devUser)
|
|
||||||
{
|
|
||||||
disconnect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*)));
|
|
||||||
disconnect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()));
|
|
||||||
disconnect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()));
|
|
||||||
m_devUser->Logout();
|
|
||||||
delete m_devUser;
|
|
||||||
m_devUser = nullptr;
|
|
||||||
m_wndStatusBar->setDeviceStatusInfo(tr("Please go to 'Menu Bar ->Scan' to select a device"), false);
|
|
||||||
updateActionStatus();
|
|
||||||
}
|
|
||||||
|
|
||||||
DeviceUser *devUser = m_devUserMgr->OpenDeviceUser();
|
DeviceUser *devUser = m_devUserMgr->OpenDeviceUser();
|
||||||
if (devUser != nullptr)
|
if (devUser != nullptr)
|
||||||
{
|
{
|
||||||
m_devUser = devUser;
|
if (nullptr != m_devUser)
|
||||||
m_wndStatusBar->setDeviceStatusInfo(tr("Device %1 is open").arg(m_devUser->GetName()), false);
|
{
|
||||||
connect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*)), Qt::DirectConnection);
|
disconnect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*)));
|
||||||
connect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()), Qt::QueuedConnection);
|
disconnect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()));
|
||||||
connect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()), Qt::QueuedConnection);
|
disconnect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()));
|
||||||
#if !defined(HG_CMP_MSC)
|
m_devUser->Logout();
|
||||||
checkRollerLife();
|
delete m_devUser;
|
||||||
#endif
|
m_devUser = nullptr;
|
||||||
updateActionStatus();
|
m_wndStatusBar->setDeviceStatusInfo(tr("Please go to 'Menu Bar ->Scan' to select a device"), false);
|
||||||
|
updateActionStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (HGBASE_ERR_OK == devUser->Open())
|
||||||
|
{
|
||||||
|
m_devUser = devUser;
|
||||||
|
m_wndStatusBar->setDeviceStatusInfo(tr("Device %1 is open").arg(m_devUser->GetName()), false);
|
||||||
|
connect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*)), Qt::DirectConnection);
|
||||||
|
connect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()), Qt::QueuedConnection);
|
||||||
|
connect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()), Qt::QueuedConnection);
|
||||||
|
#if !defined(HG_CMP_MSC)
|
||||||
|
checkRollerLife();
|
||||||
|
#endif
|
||||||
|
updateActionStatus();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete devUser;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,10 +6,12 @@ HGTwain_CreateDSM
|
||||||
HGTwain_DestroyDSM
|
HGTwain_DestroyDSM
|
||||||
HGTwain_GetDSCount
|
HGTwain_GetDSCount
|
||||||
HGTwain_GetDSNameWithIndex
|
HGTwain_GetDSNameWithIndex
|
||||||
|
HGTwain_CreateDS
|
||||||
|
HGTwain_CreateDefaultDS
|
||||||
|
HGTwain_CreateSelectedDS
|
||||||
|
HGTwain_CreateSelectedDSEx
|
||||||
|
HGTwain_DestroyDS
|
||||||
HGTwain_OpenDS
|
HGTwain_OpenDS
|
||||||
HGTwain_OpenDefaultDS
|
|
||||||
HGTwain_OpenSelectedDS
|
|
||||||
HGTwain_OpenSelectedDSEx
|
|
||||||
HGTwain_CloseDS
|
HGTwain_CloseDS
|
||||||
HGTwain_GetDSName
|
HGTwain_GetDSName
|
||||||
HGTwain_GetDSDeviceName
|
HGTwain_GetDSDeviceName
|
||||||
|
|
|
@ -60,7 +60,7 @@ HGResult HGAPI HGTwain_GetDSNameWithIndex(HGTwainDSM dsm, HGUInt index, HGChar*
|
||||||
return twainDSMImpl->GetDSName(index, name, maxLen);
|
return twainDSMImpl->GetDSName(index, name, maxLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
HGResult HGAPI HGTwain_OpenDS(HGTwainDSM dsm, HGUInt index, HGTwainDS* ds)
|
HGResult HGAPI HGTwain_CreateDS(HGTwainDSM dsm, HGUInt index, HGTwainDS* ds)
|
||||||
{
|
{
|
||||||
if (NULL == dsm)
|
if (NULL == dsm)
|
||||||
{
|
{
|
||||||
|
@ -69,7 +69,7 @@ HGResult HGAPI HGTwain_OpenDS(HGTwainDSM dsm, HGUInt index, HGTwainDS* ds)
|
||||||
|
|
||||||
HGTwainDSMImpl* twainDSMImpl = (HGTwainDSMImpl*)dsm;
|
HGTwainDSMImpl* twainDSMImpl = (HGTwainDSMImpl*)dsm;
|
||||||
class HGTwainDSImpl* dsImpl = NULL;
|
class HGTwainDSImpl* dsImpl = NULL;
|
||||||
HGResult ret = twainDSMImpl->OpenDS(index, &dsImpl);
|
HGResult ret = twainDSMImpl->CreateDS(index, &dsImpl);
|
||||||
if (HGBASE_ERR_OK != ret)
|
if (HGBASE_ERR_OK != ret)
|
||||||
{
|
{
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -79,7 +79,7 @@ HGResult HGAPI HGTwain_OpenDS(HGTwainDSM dsm, HGUInt index, HGTwainDS* ds)
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HGResult HGAPI HGTwain_OpenDefaultDS(HGTwainDSM dsm, HGTwainDS* ds)
|
HGResult HGAPI HGTwain_CreateDefaultDS(HGTwainDSM dsm, HGTwainDS* ds)
|
||||||
{
|
{
|
||||||
if (NULL == dsm)
|
if (NULL == dsm)
|
||||||
{
|
{
|
||||||
|
@ -88,7 +88,7 @@ HGResult HGAPI HGTwain_OpenDefaultDS(HGTwainDSM dsm, HGTwainDS* ds)
|
||||||
|
|
||||||
HGTwainDSMImpl* twainDSMImpl = (HGTwainDSMImpl*)dsm;
|
HGTwainDSMImpl* twainDSMImpl = (HGTwainDSMImpl*)dsm;
|
||||||
class HGTwainDSImpl* dsImpl = NULL;
|
class HGTwainDSImpl* dsImpl = NULL;
|
||||||
HGResult ret = twainDSMImpl->OpenDefaultDS(&dsImpl);
|
HGResult ret = twainDSMImpl->CreateDefaultDS(&dsImpl);
|
||||||
if (HGBASE_ERR_OK != ret)
|
if (HGBASE_ERR_OK != ret)
|
||||||
{
|
{
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -98,7 +98,7 @@ HGResult HGAPI HGTwain_OpenDefaultDS(HGTwainDSM dsm, HGTwainDS* ds)
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HGResult HGAPI HGTwain_OpenSelectedDS(HGTwainDSM dsm, HGTwainDS* ds)
|
HGResult HGAPI HGTwain_CreateSelectedDS(HGTwainDSM dsm, HGTwainDS* ds)
|
||||||
{
|
{
|
||||||
if (NULL == dsm)
|
if (NULL == dsm)
|
||||||
{
|
{
|
||||||
|
@ -107,7 +107,7 @@ HGResult HGAPI HGTwain_OpenSelectedDS(HGTwainDSM dsm, HGTwainDS* ds)
|
||||||
|
|
||||||
HGTwainDSMImpl* twainDSMImpl = (HGTwainDSMImpl*)dsm;
|
HGTwainDSMImpl* twainDSMImpl = (HGTwainDSMImpl*)dsm;
|
||||||
class HGTwainDSImpl* dsImpl = NULL;
|
class HGTwainDSImpl* dsImpl = NULL;
|
||||||
HGResult ret = twainDSMImpl->OpenSelectedDS(&dsImpl);
|
HGResult ret = twainDSMImpl->CreateSelectedDS(&dsImpl);
|
||||||
if (HGBASE_ERR_OK != ret)
|
if (HGBASE_ERR_OK != ret)
|
||||||
{
|
{
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -117,7 +117,7 @@ HGResult HGAPI HGTwain_OpenSelectedDS(HGTwainDSM dsm, HGTwainDS* ds)
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HGResult HGAPI HGTwain_OpenSelectedDSEx(HGTwainDSM dsm, HGTwainDS* ds)
|
HGResult HGAPI HGTwain_CreateSelectedDSEx(HGTwainDSM dsm, HGTwainDS* ds)
|
||||||
{
|
{
|
||||||
if (NULL == dsm)
|
if (NULL == dsm)
|
||||||
{
|
{
|
||||||
|
@ -126,7 +126,7 @@ HGResult HGAPI HGTwain_OpenSelectedDSEx(HGTwainDSM dsm, HGTwainDS* ds)
|
||||||
|
|
||||||
HGTwainDSMImpl* twainDSMImpl = (HGTwainDSMImpl*)dsm;
|
HGTwainDSMImpl* twainDSMImpl = (HGTwainDSMImpl*)dsm;
|
||||||
class HGTwainDSImpl* dsImpl = NULL;
|
class HGTwainDSImpl* dsImpl = NULL;
|
||||||
HGResult ret = twainDSMImpl->OpenSelectedDSEx(&dsImpl);
|
HGResult ret = twainDSMImpl->CreateSelectedDSEx(&dsImpl);
|
||||||
if (HGBASE_ERR_OK != ret)
|
if (HGBASE_ERR_OK != ret)
|
||||||
{
|
{
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -136,6 +136,28 @@ HGResult HGAPI HGTwain_OpenSelectedDSEx(HGTwainDSM dsm, HGTwainDS* ds)
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HGResult HGAPI HGTwain_DestroyDS(HGTwainDS ds)
|
||||||
|
{
|
||||||
|
if (NULL == ds)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_INVALIDARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
HGTwainDSImpl* twainDSImpl = (HGTwainDSImpl*)ds;
|
||||||
|
return twainDSImpl->Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
HGResult HGAPI HGTwain_OpenDS(HGTwainDS ds)
|
||||||
|
{
|
||||||
|
if (NULL == ds)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_INVALIDARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
HGTwainDSImpl* twainDSImpl = (HGTwainDSImpl*)ds;
|
||||||
|
return twainDSImpl->Open();
|
||||||
|
}
|
||||||
|
|
||||||
HGResult HGAPI HGTwain_CloseDS(HGTwainDS ds)
|
HGResult HGAPI HGTwain_CloseDS(HGTwainDS ds)
|
||||||
{
|
{
|
||||||
if (NULL == ds)
|
if (NULL == ds)
|
||||||
|
|
|
@ -51,13 +51,17 @@ HGEXPORT HGResult HGAPI HGTwain_GetDSCount(HGTwainDSM dsm, HGUInt* count);
|
||||||
|
|
||||||
HGEXPORT HGResult HGAPI HGTwain_GetDSNameWithIndex(HGTwainDSM dsm, HGUInt index, HGChar* name, HGUInt maxLen);
|
HGEXPORT HGResult HGAPI HGTwain_GetDSNameWithIndex(HGTwainDSM dsm, HGUInt index, HGChar* name, HGUInt maxLen);
|
||||||
|
|
||||||
HGEXPORT HGResult HGAPI HGTwain_OpenDS(HGTwainDSM dsm, HGUInt index, HGTwainDS *ds);
|
HGEXPORT HGResult HGAPI HGTwain_CreateDS(HGTwainDSM dsm, HGUInt index, HGTwainDS *ds);
|
||||||
|
|
||||||
HGEXPORT HGResult HGAPI HGTwain_OpenDefaultDS(HGTwainDSM dsm, HGTwainDS* ds);
|
HGEXPORT HGResult HGAPI HGTwain_CreateDefaultDS(HGTwainDSM dsm, HGTwainDS* ds);
|
||||||
|
|
||||||
HGEXPORT HGResult HGAPI HGTwain_OpenSelectedDS(HGTwainDSM dsm, HGTwainDS* ds);
|
HGEXPORT HGResult HGAPI HGTwain_CreateSelectedDS(HGTwainDSM dsm, HGTwainDS* ds);
|
||||||
|
|
||||||
HGEXPORT HGResult HGAPI HGTwain_OpenSelectedDSEx(HGTwainDSM dsm, HGTwainDS* ds);
|
HGEXPORT HGResult HGAPI HGTwain_CreateSelectedDSEx(HGTwainDSM dsm, HGTwainDS* ds);
|
||||||
|
|
||||||
|
HGEXPORT HGResult HGAPI HGTwain_DestroyDS(HGTwainDS ds);
|
||||||
|
|
||||||
|
HGEXPORT HGResult HGAPI HGTwain_OpenDS(HGTwainDS ds);
|
||||||
|
|
||||||
HGEXPORT HGResult HGAPI HGTwain_CloseDS(HGTwainDS ds);
|
HGEXPORT HGResult HGAPI HGTwain_CloseDS(HGTwainDS ds);
|
||||||
|
|
||||||
|
|
|
@ -149,7 +149,7 @@ HGResult HGTwainDSMImpl::GetDSName(HGUInt index, HGChar* name, HGUInt maxLen)
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HGResult HGTwainDSMImpl::OpenDS(HGUInt index, class HGTwainDSImpl** dsImpl)
|
HGResult HGTwainDSMImpl::CreateDS(HGUInt index, class HGTwainDSImpl** dsImpl)
|
||||||
{
|
{
|
||||||
if (NULL == dsImpl)
|
if (NULL == dsImpl)
|
||||||
{
|
{
|
||||||
|
@ -159,13 +159,7 @@ HGResult HGTwainDSMImpl::OpenDS(HGUInt index, class HGTwainDSImpl** dsImpl)
|
||||||
if (index >= (HGUInt)m_vds.size())
|
if (index >= (HGUInt)m_vds.size())
|
||||||
return HGBASE_ERR_INVALIDARG;
|
return HGBASE_ERR_INVALIDARG;
|
||||||
|
|
||||||
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this);
|
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this, &m_vds[index]);
|
||||||
HGResult ret = newDSImpl->Open(&m_vds[index]);
|
|
||||||
if (HGBASE_ERR_OK != ret)
|
|
||||||
{
|
|
||||||
delete newDSImpl;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string DSName = m_vds[index].ProductName;
|
std::string DSName = m_vds[index].ProductName;
|
||||||
saveCfgValue("twain", "source", DSName);
|
saveCfgValue("twain", "source", DSName);
|
||||||
|
@ -174,7 +168,7 @@ HGResult HGTwainDSMImpl::OpenDS(HGUInt index, class HGTwainDSImpl** dsImpl)
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HGResult HGTwainDSMImpl::OpenDefaultDS(class HGTwainDSImpl** dsImpl)
|
HGResult HGTwainDSMImpl::CreateDefaultDS(class HGTwainDSImpl** dsImpl)
|
||||||
{
|
{
|
||||||
if (NULL == dsImpl)
|
if (NULL == dsImpl)
|
||||||
{
|
{
|
||||||
|
@ -203,13 +197,7 @@ HGResult HGTwainDSMImpl::OpenDefaultDS(class HGTwainDSImpl** dsImpl)
|
||||||
index = 0;
|
index = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this);
|
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this, &m_vds[index]);
|
||||||
HGResult ret = newDSImpl->Open(&m_vds[index]);
|
|
||||||
if (HGBASE_ERR_OK != ret)
|
|
||||||
{
|
|
||||||
delete newDSImpl;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string DSName = m_vds[index].ProductName;
|
std::string DSName = m_vds[index].ProductName;
|
||||||
saveCfgValue("twain", "source", DSName);
|
saveCfgValue("twain", "source", DSName);
|
||||||
|
@ -218,7 +206,7 @@ HGResult HGTwainDSMImpl::OpenDefaultDS(class HGTwainDSImpl** dsImpl)
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HGResult HGTwainDSMImpl::OpenSelectedDS(class HGTwainDSImpl** dsImpl)
|
HGResult HGTwainDSMImpl::CreateSelectedDS(class HGTwainDSImpl** dsImpl)
|
||||||
{
|
{
|
||||||
if (NULL == dsImpl)
|
if (NULL == dsImpl)
|
||||||
{
|
{
|
||||||
|
@ -231,13 +219,7 @@ HGResult HGTwainDSMImpl::OpenSelectedDS(class HGTwainDSImpl** dsImpl)
|
||||||
return HGTWAIN_ERR_CANCELUI;
|
return HGTWAIN_ERR_CANCELUI;
|
||||||
}
|
}
|
||||||
|
|
||||||
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this);
|
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this, &selectDS);
|
||||||
HGResult ret = newDSImpl->Open(&selectDS);
|
|
||||||
if (HGBASE_ERR_OK != ret)
|
|
||||||
{
|
|
||||||
delete newDSImpl;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string DSName = selectDS.ProductName;
|
std::string DSName = selectDS.ProductName;
|
||||||
saveCfgValue("twain", "source", DSName);
|
saveCfgValue("twain", "source", DSName);
|
||||||
|
@ -246,7 +228,7 @@ HGResult HGTwainDSMImpl::OpenSelectedDS(class HGTwainDSImpl** dsImpl)
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HGResult HGTwainDSMImpl::OpenSelectedDSEx(class HGTwainDSImpl** dsImpl)
|
HGResult HGTwainDSMImpl::CreateSelectedDSEx(class HGTwainDSImpl** dsImpl)
|
||||||
{
|
{
|
||||||
if (NULL == dsImpl)
|
if (NULL == dsImpl)
|
||||||
{
|
{
|
||||||
|
@ -267,13 +249,7 @@ HGResult HGTwainDSMImpl::OpenSelectedDSEx(class HGTwainDSImpl** dsImpl)
|
||||||
return HGTWAIN_ERR_CANCELUI;
|
return HGTWAIN_ERR_CANCELUI;
|
||||||
}
|
}
|
||||||
|
|
||||||
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this);
|
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this, &selectDS);
|
||||||
HGResult ret = newDSImpl->Open(&selectDS);
|
|
||||||
if (HGBASE_ERR_OK != ret)
|
|
||||||
{
|
|
||||||
delete newDSImpl;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string DSName = selectDS.ProductName;
|
std::string DSName = selectDS.ProductName;
|
||||||
saveCfgValue("twain", "source", DSName);
|
saveCfgValue("twain", "source", DSName);
|
||||||
|
@ -359,10 +335,11 @@ bool HGTwainDSMImpl::filterTwainSource(const char* sourceName, int majorNum)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HGTwainDSImpl::HGTwainDSImpl(HGTwainDSMImpl* dsmImpl)
|
HGTwainDSImpl::HGTwainDSImpl(HGTwainDSMImpl* dsmImpl, TW_IDENTITY* iden)
|
||||||
{
|
{
|
||||||
m_dsmImpl = dsmImpl;
|
m_dsmImpl = dsmImpl;
|
||||||
memset(&m_iden, 0, sizeof(TW_IDENTITY));
|
assert(NULL != iden);
|
||||||
|
memcpy(&m_iden, iden, sizeof(TW_IDENTITY));
|
||||||
m_open = HGFALSE;
|
m_open = HGFALSE;
|
||||||
m_singleScan = HGFALSE;
|
m_singleScan = HGFALSE;
|
||||||
m_oldXferCount = -1;
|
m_oldXferCount = -1;
|
||||||
|
@ -382,19 +359,26 @@ HGTwainDSImpl::~HGTwainDSImpl()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HGResult HGTwainDSImpl::Open(TW_IDENTITY* iden)
|
HGResult HGTwainDSImpl::Destroy()
|
||||||
{
|
{
|
||||||
assert(!m_open);
|
Close();
|
||||||
assert(NULL != iden);
|
m_dsmImpl->RemoveDS(this);
|
||||||
|
return HGBASE_ERR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
USHORT ret = m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, NULL, DG_CONTROL, DAT_IDENTITY, MSG_OPENDS, iden);
|
HGResult HGTwainDSImpl::Open()
|
||||||
|
{
|
||||||
|
if (m_open)
|
||||||
|
{
|
||||||
|
return HGTWAIN_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
USHORT ret = m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, NULL, DG_CONTROL, DAT_IDENTITY, MSG_OPENDS, &m_iden);
|
||||||
if (TWRC_SUCCESS != ret)
|
if (TWRC_SUCCESS != ret)
|
||||||
{
|
{
|
||||||
return HGTWAIN_ERR_FAIL;
|
return HGTWAIN_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(&m_iden, iden, sizeof(TW_IDENTITY));
|
|
||||||
|
|
||||||
HGBase_CreateEvent(HGFALSE, HGFALSE, &m_event);
|
HGBase_CreateEvent(HGFALSE, HGFALSE, &m_event);
|
||||||
m_stopThread = HGFALSE;
|
m_stopThread = HGFALSE;
|
||||||
HGBase_OpenThread(ThreadFunc, this, &m_thread);
|
HGBase_OpenThread(ThreadFunc, this, &m_thread);
|
||||||
|
@ -405,7 +389,10 @@ HGResult HGTwainDSImpl::Open(TW_IDENTITY* iden)
|
||||||
|
|
||||||
HGResult HGTwainDSImpl::Close()
|
HGResult HGTwainDSImpl::Close()
|
||||||
{
|
{
|
||||||
assert(m_open);
|
if (!m_open)
|
||||||
|
{
|
||||||
|
return HGTWAIN_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
Disable();
|
Disable();
|
||||||
m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, NULL, DG_CONTROL, DAT_IDENTITY, MSG_CLOSEDS, (TW_MEMREF)&m_iden);
|
m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, NULL, DG_CONTROL, DAT_IDENTITY, MSG_CLOSEDS, (TW_MEMREF)&m_iden);
|
||||||
|
@ -418,7 +405,6 @@ HGResult HGTwainDSImpl::Close()
|
||||||
m_event = NULL;
|
m_event = NULL;
|
||||||
|
|
||||||
m_open = HGFALSE;
|
m_open = HGFALSE;
|
||||||
m_dsmImpl->RemoveDS(this);
|
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,10 +21,10 @@ public:
|
||||||
HGResult Destroy();
|
HGResult Destroy();
|
||||||
HGResult GetDSCount(HGUInt* count);
|
HGResult GetDSCount(HGUInt* count);
|
||||||
HGResult GetDSName(HGUInt index, HGChar* name, HGUInt maxLen);
|
HGResult GetDSName(HGUInt index, HGChar* name, HGUInt maxLen);
|
||||||
HGResult OpenDS(HGUInt index, class HGTwainDSImpl** dsImpl);
|
HGResult CreateDS(HGUInt index, class HGTwainDSImpl** dsImpl);
|
||||||
HGResult OpenDefaultDS(class HGTwainDSImpl** dsImpl);
|
HGResult CreateDefaultDS(class HGTwainDSImpl** dsImpl);
|
||||||
HGResult OpenSelectedDS(class HGTwainDSImpl** dsImpl);
|
HGResult CreateSelectedDS(class HGTwainDSImpl** dsImpl);
|
||||||
HGResult OpenSelectedDSEx(class HGTwainDSImpl** dsImpl);
|
HGResult CreateSelectedDSEx(class HGTwainDSImpl** dsImpl);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void RemoveDS(class HGTwainDSImpl* dsImpl);
|
void RemoveDS(class HGTwainDSImpl* dsImpl);
|
||||||
|
@ -46,11 +46,12 @@ class HGTwainDSImpl
|
||||||
{
|
{
|
||||||
friend class HGTwainDSMImpl;
|
friend class HGTwainDSMImpl;
|
||||||
public:
|
public:
|
||||||
HGTwainDSImpl(HGTwainDSMImpl* dsmImpl);
|
HGTwainDSImpl(HGTwainDSMImpl* dsmImpl, TW_IDENTITY* iden);
|
||||||
~HGTwainDSImpl();
|
~HGTwainDSImpl();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HGResult Open(TW_IDENTITY* iden);
|
HGResult Destroy();
|
||||||
|
HGResult Open();
|
||||||
HGResult Close();
|
HGResult Close();
|
||||||
HGResult GetName(HGChar* name, HGUInt maxLen);
|
HGResult GetName(HGChar* name, HGUInt maxLen);
|
||||||
HGResult GetDeviceName(HGChar* name, HGUInt maxLen);
|
HGResult GetDeviceName(HGChar* name, HGUInt maxLen);
|
||||||
|
|
Loading…
Reference in New Issue