#include "device_user.h" #include #if defined(HG_CMP_MSC) DeviceUserMgr::DeviceUserMgr(QWidget *wnd) { m_wnd = wnd; m_twainDSM = nullptr; HGTwain_CreateDSM((HWND)m_wnd->winId(), &m_twainDSM); } DeviceUserMgr::~DeviceUserMgr() { HGTwain_DestroyDSM(m_twainDSM); m_twainDSM = nullptr; } class DeviceUser* DeviceUserMgr::OpenDeviceUser() { HGTwainDS ds = nullptr; HGTwain_OpenSelectedDSEx(m_twainDSM, &ds); if (nullptr == ds) return nullptr; return new DeviceUser(m_wnd, ds); } DeviceUser::DeviceUser(QWidget *wnd, HGTwainDS ds) { m_wnd = wnd; m_twainDS = ds; } DeviceUser::~DeviceUser() { HGTwain_CloseDS(m_twainDS); m_twainDS = nullptr; } QString DeviceUser::GetName() { HGChar devName[256]; HGTwain_GetDSName(m_twainDS, devName, 256); return QString(devName); } HGResult DeviceUser::ShowSettingDlg() { return HGTwain_EnableDSUIOnly(m_twainDS, (HWND)m_wnd->winId(), DSEventFunc, this); } HGResult DeviceUser::StartScan() { return HGTwain_EnableDS(m_twainDS, HGFALSE, nullptr, DSEventFunc, this, DSImageFunc, this); } void HGAPI DeviceUser::DSEventFunc(HGTwainDS ds, HGUInt event, HGPointer param) { DeviceUser* p = (DeviceUser*)param; emit p->scanEvent(event); } void HGAPI DeviceUser::DSImageFunc(HGTwainDS ds, HGImage image, HGPointer param) { DeviceUser* p = (DeviceUser*)param; emit p->newImage(image); } #else DeviceUserMgr::DeviceUserMgr(QWidget *wnd) { m_wnd = wnd; m_saneMgr = nullptr; HGSane_CreateManager(&m_saneMgr); } DeviceUserMgr::~DeviceUserMgr() { HGSane_DestroyManager(m_saneMgr); m_saneMgr = nullptr; } class DeviceUser* DeviceUserMgr::OpenDeviceUser() { HGSaneSource source = nullptr; HGSane_OpenSelectedSource(m_saneMgr, m_wnd, &source); 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); } HGSaneDevice dev = nullptr; HGSane_OpenSelectedDevice(source, m_wnd, &dev); if (nullptr == dev) { HGSane_CloseSource(source); return nullptr; } return new DeviceUser(m_wnd, source, dev); } DeviceUser::DeviceUser(QWidget *wnd, HGSaneSource source, HGSaneDevice dev) { m_wnd = wnd; m_source = source; m_saneDev = dev; } DeviceUser::~DeviceUser() { HGSane_CloseDevice(m_saneDev); m_saneDev = nullptr; HGSane_CloseSource(m_source); m_source = nullptr; } QString DeviceUser::GetName() { HGChar devName[256]; HGSane_GetSourceName(m_source, devName, 256); return QString(devName); } HGResult DeviceUser::ShowSettingDlg() { return HGSane_ShowDeviceSettingDlg(m_saneDev, m_wnd); } HGResult DeviceUser::StartScan() { return HGSane_StartDevice(m_saneDev, m_wnd, DeviceEventFunc, this, DeviceImageFunc, this); } void HGAPI DeviceUser::DeviceEventFunc(HGSaneDevice dev, HGUInt event, HGPointer param) { } void HGAPI DeviceUser::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGPointer param) { DeviceUser* p = (DeviceUser*)param; emit p->newImage(image); } #endif