修改twainuser接口,将打开twain源和打开设备分开处理
This commit is contained in:
parent
559851ebab
commit
7be7e50272
|
@ -6,7 +6,7 @@
|
|||
|
||||
#if defined(HG_CMP_MSC)
|
||||
|
||||
DeviceUserMgr::DeviceUserMgr(QString password, QWidget *wnd)
|
||||
DeviceUserMgr::DeviceUserMgr(const QString &password, QWidget *wnd)
|
||||
{
|
||||
m_password = password;
|
||||
m_wnd = wnd;
|
||||
|
@ -23,7 +23,7 @@ DeviceUserMgr::~DeviceUserMgr()
|
|||
class DeviceUser* DeviceUserMgr::OpenDeviceUser()
|
||||
{
|
||||
HGTwainDS ds = nullptr;
|
||||
HGTwain_OpenSelectedDSEx(m_twainDSM, &ds);
|
||||
HGTwain_CreateSelectedDSEx(m_twainDSM, &ds);
|
||||
if (nullptr == ds)
|
||||
return nullptr;
|
||||
return new DeviceUser(m_wnd, ds, m_password);
|
||||
|
@ -32,13 +32,13 @@ class DeviceUser* DeviceUserMgr::OpenDeviceUser()
|
|||
DeviceUser *DeviceUserMgr::OpenDefaultDeviceUser()
|
||||
{
|
||||
HGTwainDS ds = nullptr;
|
||||
HGTwain_OpenDefaultDS(m_twainDSM, &ds);
|
||||
HGTwain_CreateDefaultDS(m_twainDSM, &ds);
|
||||
if (nullptr == ds)
|
||||
return nullptr;
|
||||
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_twainDS = ds;
|
||||
|
@ -48,9 +48,20 @@ DeviceUser::DeviceUser(QWidget *wnd, HGTwainDS ds, QString password)
|
|||
DeviceUser::~DeviceUser()
|
||||
{
|
||||
HGTwain_CloseDS(m_twainDS);
|
||||
HGTwain_DestroyDS(m_twainDS);
|
||||
m_twainDS = nullptr;
|
||||
}
|
||||
|
||||
HGResult DeviceUser::Open()
|
||||
{
|
||||
return HGTwain_OpenDS(m_twainDS);
|
||||
}
|
||||
|
||||
HGResult DeviceUser::Close()
|
||||
{
|
||||
return HGTwain_CloseDS(m_twainDS);
|
||||
}
|
||||
|
||||
QString DeviceUser::GetName()
|
||||
{
|
||||
HGChar devName[256] = {0};
|
||||
|
@ -147,11 +158,11 @@ void HGAPI DeviceUser::DSImageFunc(HGTwainDS ds, HGImage image, HGPointer param)
|
|||
|
||||
#else
|
||||
|
||||
DeviceUserMgr::DeviceUserMgr(QString password, QWidget *wnd)
|
||||
DeviceUserMgr::DeviceUserMgr(const QString &password, QWidget *wnd)
|
||||
{
|
||||
m_wnd = wnd;
|
||||
m_saneMgr = nullptr;
|
||||
m_password = password;
|
||||
m_saneMgr = nullptr;
|
||||
HGSane_CreateManager(&m_saneMgr);
|
||||
}
|
||||
|
||||
|
@ -168,38 +179,7 @@ class DeviceUser* DeviceUserMgr::OpenDeviceUser()
|
|||
if (nullptr == source)
|
||||
return nullptr;
|
||||
|
||||
HGUInt devCount = 0;
|
||||
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);
|
||||
return new DeviceUser(m_wnd, source, m_password);
|
||||
}
|
||||
|
||||
DeviceUser *DeviceUserMgr::OpenDefaultDeviceUser()
|
||||
|
@ -209,45 +189,14 @@ DeviceUser *DeviceUserMgr::OpenDefaultDeviceUser()
|
|||
if (nullptr == source)
|
||||
return nullptr;
|
||||
|
||||
HGUInt devCount = 0;
|
||||
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);
|
||||
return new DeviceUser(m_wnd, source, 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_source = source;
|
||||
m_saneDev = dev;
|
||||
m_saneDev = nullptr;
|
||||
m_password = password;
|
||||
}
|
||||
|
||||
|
@ -259,6 +208,28 @@ DeviceUser::~DeviceUser()
|
|||
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()
|
||||
{
|
||||
HGChar devName[256];
|
||||
|
|
|
@ -12,7 +12,7 @@ class DeviceUserMgr : public QObject
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DeviceUserMgr(QString password, QWidget *wnd);
|
||||
DeviceUserMgr(const QString &password, QWidget *wnd);
|
||||
~DeviceUserMgr();
|
||||
|
||||
// 弹出设备选择对话框,选择twain源
|
||||
|
@ -30,10 +30,12 @@ class DeviceUser : public QObject
|
|||
Q_OBJECT
|
||||
|
||||
friend class DeviceUserMgr;
|
||||
DeviceUser(QWidget *wnd, HGTwainDS ds, QString password);
|
||||
DeviceUser(QWidget *wnd, HGTwainDS ds, const QString &password);
|
||||
public:
|
||||
~DeviceUser();
|
||||
|
||||
HGResult Open();
|
||||
HGResult Close();
|
||||
// 获取设备名字
|
||||
QString GetName();
|
||||
// 弹出配置对话框
|
||||
|
@ -73,7 +75,7 @@ class DeviceUserMgr : public QObject
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DeviceUserMgr(QString password, QWidget *wnd);
|
||||
DeviceUserMgr(const QString &password, QWidget *wnd);
|
||||
~DeviceUserMgr();
|
||||
|
||||
// 弹出设备选择对话框,选择设备
|
||||
|
@ -91,10 +93,12 @@ class DeviceUser : public QObject
|
|||
Q_OBJECT
|
||||
|
||||
friend class DeviceUserMgr;
|
||||
DeviceUser(QWidget *wnd, HGSaneSource source, HGSaneDevice dev, QString password);
|
||||
DeviceUser(QWidget *wnd, HGSaneSource source, const QString &password);
|
||||
public:
|
||||
~DeviceUser();
|
||||
|
||||
HGResult Open();
|
||||
HGResult Close();
|
||||
// 获取设备名字
|
||||
QString GetName();
|
||||
// 弹出配置对话框
|
||||
|
|
|
@ -360,14 +360,22 @@ MainWindow::MainWindow(const QString& appLang, QWidget *parent)
|
|||
m_devUser = m_devUserMgr->OpenDefaultDeviceUser();
|
||||
if (m_devUser != nullptr)
|
||||
{
|
||||
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 (HGBASE_ERR_OK == m_devUser->Open())
|
||||
{
|
||||
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
|
||||
#if !defined(HG_CMP_MSC)
|
||||
checkRollerLife();
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
delete m_devUser;
|
||||
m_devUser = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
QString password = getCfgValue("login", "password", QString(""));
|
||||
|
@ -4405,29 +4413,36 @@ void MainWindow::on_act_selectDevice_triggered()
|
|||
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();
|
||||
if (devUser != nullptr)
|
||||
{
|
||||
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();
|
||||
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();
|
||||
}
|
||||
|
||||
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_GetDSCount
|
||||
HGTwain_GetDSNameWithIndex
|
||||
HGTwain_CreateDS
|
||||
HGTwain_CreateDefaultDS
|
||||
HGTwain_CreateSelectedDS
|
||||
HGTwain_CreateSelectedDSEx
|
||||
HGTwain_DestroyDS
|
||||
HGTwain_OpenDS
|
||||
HGTwain_OpenDefaultDS
|
||||
HGTwain_OpenSelectedDS
|
||||
HGTwain_OpenSelectedDSEx
|
||||
HGTwain_CloseDS
|
||||
HGTwain_GetDSName
|
||||
HGTwain_GetDSDeviceName
|
||||
|
|
|
@ -60,7 +60,7 @@ HGResult HGAPI HGTwain_GetDSNameWithIndex(HGTwainDSM dsm, HGUInt index, HGChar*
|
|||
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)
|
||||
{
|
||||
|
@ -69,7 +69,7 @@ HGResult HGAPI HGTwain_OpenDS(HGTwainDSM dsm, HGUInt index, HGTwainDS* ds)
|
|||
|
||||
HGTwainDSMImpl* twainDSMImpl = (HGTwainDSMImpl*)dsm;
|
||||
class HGTwainDSImpl* dsImpl = NULL;
|
||||
HGResult ret = twainDSMImpl->OpenDS(index, &dsImpl);
|
||||
HGResult ret = twainDSMImpl->CreateDS(index, &dsImpl);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
return ret;
|
||||
|
@ -79,7 +79,7 @@ HGResult HGAPI HGTwain_OpenDS(HGTwainDSM dsm, HGUInt index, HGTwainDS* ds)
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGAPI HGTwain_OpenDefaultDS(HGTwainDSM dsm, HGTwainDS* ds)
|
||||
HGResult HGAPI HGTwain_CreateDefaultDS(HGTwainDSM dsm, HGTwainDS* ds)
|
||||
{
|
||||
if (NULL == dsm)
|
||||
{
|
||||
|
@ -88,7 +88,7 @@ HGResult HGAPI HGTwain_OpenDefaultDS(HGTwainDSM dsm, HGTwainDS* ds)
|
|||
|
||||
HGTwainDSMImpl* twainDSMImpl = (HGTwainDSMImpl*)dsm;
|
||||
class HGTwainDSImpl* dsImpl = NULL;
|
||||
HGResult ret = twainDSMImpl->OpenDefaultDS(&dsImpl);
|
||||
HGResult ret = twainDSMImpl->CreateDefaultDS(&dsImpl);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
return ret;
|
||||
|
@ -98,7 +98,7 @@ HGResult HGAPI HGTwain_OpenDefaultDS(HGTwainDSM dsm, HGTwainDS* ds)
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGAPI HGTwain_OpenSelectedDS(HGTwainDSM dsm, HGTwainDS* ds)
|
||||
HGResult HGAPI HGTwain_CreateSelectedDS(HGTwainDSM dsm, HGTwainDS* ds)
|
||||
{
|
||||
if (NULL == dsm)
|
||||
{
|
||||
|
@ -107,7 +107,7 @@ HGResult HGAPI HGTwain_OpenSelectedDS(HGTwainDSM dsm, HGTwainDS* ds)
|
|||
|
||||
HGTwainDSMImpl* twainDSMImpl = (HGTwainDSMImpl*)dsm;
|
||||
class HGTwainDSImpl* dsImpl = NULL;
|
||||
HGResult ret = twainDSMImpl->OpenSelectedDS(&dsImpl);
|
||||
HGResult ret = twainDSMImpl->CreateSelectedDS(&dsImpl);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
return ret;
|
||||
|
@ -117,7 +117,7 @@ HGResult HGAPI HGTwain_OpenSelectedDS(HGTwainDSM dsm, HGTwainDS* ds)
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGAPI HGTwain_OpenSelectedDSEx(HGTwainDSM dsm, HGTwainDS* ds)
|
||||
HGResult HGAPI HGTwain_CreateSelectedDSEx(HGTwainDSM dsm, HGTwainDS* ds)
|
||||
{
|
||||
if (NULL == dsm)
|
||||
{
|
||||
|
@ -126,7 +126,7 @@ HGResult HGAPI HGTwain_OpenSelectedDSEx(HGTwainDSM dsm, HGTwainDS* ds)
|
|||
|
||||
HGTwainDSMImpl* twainDSMImpl = (HGTwainDSMImpl*)dsm;
|
||||
class HGTwainDSImpl* dsImpl = NULL;
|
||||
HGResult ret = twainDSMImpl->OpenSelectedDSEx(&dsImpl);
|
||||
HGResult ret = twainDSMImpl->CreateSelectedDSEx(&dsImpl);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
return ret;
|
||||
|
@ -136,6 +136,28 @@ HGResult HGAPI HGTwain_OpenSelectedDSEx(HGTwainDSM dsm, HGTwainDS* ds)
|
|||
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)
|
||||
{
|
||||
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_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);
|
||||
|
||||
|
|
|
@ -149,7 +149,7 @@ HGResult HGTwainDSMImpl::GetDSName(HGUInt index, HGChar* name, HGUInt maxLen)
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGTwainDSMImpl::OpenDS(HGUInt index, class HGTwainDSImpl** dsImpl)
|
||||
HGResult HGTwainDSMImpl::CreateDS(HGUInt index, class HGTwainDSImpl** dsImpl)
|
||||
{
|
||||
if (NULL == dsImpl)
|
||||
{
|
||||
|
@ -159,13 +159,7 @@ HGResult HGTwainDSMImpl::OpenDS(HGUInt index, class HGTwainDSImpl** dsImpl)
|
|||
if (index >= (HGUInt)m_vds.size())
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
|
||||
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this);
|
||||
HGResult ret = newDSImpl->Open(&m_vds[index]);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
delete newDSImpl;
|
||||
return ret;
|
||||
}
|
||||
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this, &m_vds[index]);
|
||||
|
||||
std::string DSName = m_vds[index].ProductName;
|
||||
saveCfgValue("twain", "source", DSName);
|
||||
|
@ -174,7 +168,7 @@ HGResult HGTwainDSMImpl::OpenDS(HGUInt index, class HGTwainDSImpl** dsImpl)
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGTwainDSMImpl::OpenDefaultDS(class HGTwainDSImpl** dsImpl)
|
||||
HGResult HGTwainDSMImpl::CreateDefaultDS(class HGTwainDSImpl** dsImpl)
|
||||
{
|
||||
if (NULL == dsImpl)
|
||||
{
|
||||
|
@ -203,13 +197,7 @@ HGResult HGTwainDSMImpl::OpenDefaultDS(class HGTwainDSImpl** dsImpl)
|
|||
index = 0;
|
||||
}
|
||||
|
||||
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this);
|
||||
HGResult ret = newDSImpl->Open(&m_vds[index]);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
delete newDSImpl;
|
||||
return ret;
|
||||
}
|
||||
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this, &m_vds[index]);
|
||||
|
||||
std::string DSName = m_vds[index].ProductName;
|
||||
saveCfgValue("twain", "source", DSName);
|
||||
|
@ -218,7 +206,7 @@ HGResult HGTwainDSMImpl::OpenDefaultDS(class HGTwainDSImpl** dsImpl)
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGTwainDSMImpl::OpenSelectedDS(class HGTwainDSImpl** dsImpl)
|
||||
HGResult HGTwainDSMImpl::CreateSelectedDS(class HGTwainDSImpl** dsImpl)
|
||||
{
|
||||
if (NULL == dsImpl)
|
||||
{
|
||||
|
@ -231,13 +219,7 @@ HGResult HGTwainDSMImpl::OpenSelectedDS(class HGTwainDSImpl** dsImpl)
|
|||
return HGTWAIN_ERR_CANCELUI;
|
||||
}
|
||||
|
||||
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this);
|
||||
HGResult ret = newDSImpl->Open(&selectDS);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
delete newDSImpl;
|
||||
return ret;
|
||||
}
|
||||
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this, &selectDS);
|
||||
|
||||
std::string DSName = selectDS.ProductName;
|
||||
saveCfgValue("twain", "source", DSName);
|
||||
|
@ -246,7 +228,7 @@ HGResult HGTwainDSMImpl::OpenSelectedDS(class HGTwainDSImpl** dsImpl)
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGTwainDSMImpl::OpenSelectedDSEx(class HGTwainDSImpl** dsImpl)
|
||||
HGResult HGTwainDSMImpl::CreateSelectedDSEx(class HGTwainDSImpl** dsImpl)
|
||||
{
|
||||
if (NULL == dsImpl)
|
||||
{
|
||||
|
@ -267,13 +249,7 @@ HGResult HGTwainDSMImpl::OpenSelectedDSEx(class HGTwainDSImpl** dsImpl)
|
|||
return HGTWAIN_ERR_CANCELUI;
|
||||
}
|
||||
|
||||
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this);
|
||||
HGResult ret = newDSImpl->Open(&selectDS);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
delete newDSImpl;
|
||||
return ret;
|
||||
}
|
||||
class HGTwainDSImpl* newDSImpl = new HGTwainDSImpl(this, &selectDS);
|
||||
|
||||
std::string DSName = selectDS.ProductName;
|
||||
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;
|
||||
memset(&m_iden, 0, sizeof(TW_IDENTITY));
|
||||
assert(NULL != iden);
|
||||
memcpy(&m_iden, iden, sizeof(TW_IDENTITY));
|
||||
m_open = HGFALSE;
|
||||
m_singleScan = HGFALSE;
|
||||
m_oldXferCount = -1;
|
||||
|
@ -382,19 +359,26 @@ HGTwainDSImpl::~HGTwainDSImpl()
|
|||
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::Open(TW_IDENTITY* iden)
|
||||
HGResult HGTwainDSImpl::Destroy()
|
||||
{
|
||||
assert(!m_open);
|
||||
assert(NULL != iden);
|
||||
Close();
|
||||
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)
|
||||
{
|
||||
return HGTWAIN_ERR_FAIL;
|
||||
}
|
||||
|
||||
memcpy(&m_iden, iden, sizeof(TW_IDENTITY));
|
||||
|
||||
HGBase_CreateEvent(HGFALSE, HGFALSE, &m_event);
|
||||
m_stopThread = HGFALSE;
|
||||
HGBase_OpenThread(ThreadFunc, this, &m_thread);
|
||||
|
@ -405,7 +389,10 @@ HGResult HGTwainDSImpl::Open(TW_IDENTITY* iden)
|
|||
|
||||
HGResult HGTwainDSImpl::Close()
|
||||
{
|
||||
assert(m_open);
|
||||
if (!m_open)
|
||||
{
|
||||
return HGTWAIN_ERR_FAIL;
|
||||
}
|
||||
|
||||
Disable();
|
||||
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_open = HGFALSE;
|
||||
m_dsmImpl->RemoveDS(this);
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -21,10 +21,10 @@ public:
|
|||
HGResult Destroy();
|
||||
HGResult GetDSCount(HGUInt* count);
|
||||
HGResult GetDSName(HGUInt index, HGChar* name, HGUInt maxLen);
|
||||
HGResult OpenDS(HGUInt index, class HGTwainDSImpl** dsImpl);
|
||||
HGResult OpenDefaultDS(class HGTwainDSImpl** dsImpl);
|
||||
HGResult OpenSelectedDS(class HGTwainDSImpl** dsImpl);
|
||||
HGResult OpenSelectedDSEx(class HGTwainDSImpl** dsImpl);
|
||||
HGResult CreateDS(HGUInt index, class HGTwainDSImpl** dsImpl);
|
||||
HGResult CreateDefaultDS(class HGTwainDSImpl** dsImpl);
|
||||
HGResult CreateSelectedDS(class HGTwainDSImpl** dsImpl);
|
||||
HGResult CreateSelectedDSEx(class HGTwainDSImpl** dsImpl);
|
||||
|
||||
private:
|
||||
void RemoveDS(class HGTwainDSImpl* dsImpl);
|
||||
|
@ -46,11 +46,12 @@ class HGTwainDSImpl
|
|||
{
|
||||
friend class HGTwainDSMImpl;
|
||||
public:
|
||||
HGTwainDSImpl(HGTwainDSMImpl* dsmImpl);
|
||||
HGTwainDSImpl(HGTwainDSMImpl* dsmImpl, TW_IDENTITY* iden);
|
||||
~HGTwainDSImpl();
|
||||
|
||||
public:
|
||||
HGResult Open(TW_IDENTITY* iden);
|
||||
HGResult Destroy();
|
||||
HGResult Open();
|
||||
HGResult Close();
|
||||
HGResult GetName(HGChar* name, HGUInt maxLen);
|
||||
HGResult GetDeviceName(HGChar* name, HGUInt maxLen);
|
||||
|
|
Loading…
Reference in New Issue