|
@@ -34,6 +34,7 @@ using namespace QtTWAIN;
|
|
|
|
|
|
QTWAINContext::QTWAINContext() : m_dsm(QDSMInterface::instance())
|
|
|
, m_state(Initial)
|
|
|
+ , m_windowHandle(nullptr)
|
|
|
{
|
|
|
//TODO: refactor app identity initialization to real app name read from QApplication
|
|
|
//Ok for now
|
|
@@ -49,6 +50,8 @@ QTWAINContext::QTWAINContext() : m_dsm(QDSMInterface::instance())
|
|
|
memcpy(m_appIdentity.Manufacturer, "QtTWAIN", sizeof(m_appIdentity.Manufacturer) > strlen("QtTWAIN") ? strlen("QtTWAIN") : sizeof(m_appIdentity.Manufacturer));
|
|
|
memcpy(m_appIdentity.ProductFamily, "QtTWAIN", sizeof(m_appIdentity.ProductFamily) > strlen("QtTWAIN") ? strlen("QtTWAIN") : sizeof(m_appIdentity.ProductFamily));
|
|
|
memcpy(m_appIdentity.ProductName, "QtTWAIN", sizeof(m_appIdentity.ProductName) > strlen("QtTWAIN") ? strlen("QtTWAIN") : sizeof(m_appIdentity.ProductName));
|
|
|
+
|
|
|
+ memset(&m_status, 0, sizeof(m_status));
|
|
|
}
|
|
|
|
|
|
QTWAINContext::~QTWAINContext()
|
|
@@ -67,7 +70,8 @@ void QTWAINContext::openDSM(const WId winId)
|
|
|
m_windowHandle = reinterpret_cast<TW_HANDLE>(winId);
|
|
|
if (m_windowHandle != nullptr) {
|
|
|
if (TWRC_SUCCESS != m_dsm->entry(&m_appIdentity, nullptr, DG_CONTROL, DAT_PARENT, MSG_OPENDSM, &m_windowHandle)) {
|
|
|
- qCritical() << "Unable to open DSM";
|
|
|
+ QtTWAIN::QDSMInterface::instance()->entry(&m_appIdentity, nullptr, DG_CONTROL, DAT_STATUS, MSG_GET, &m_status);
|
|
|
+ qCritical() << "Unable to open DSM: " << m_status.ConditionCode;
|
|
|
return;
|
|
|
}
|
|
|
m_state = DSMOpen;
|
|
@@ -111,6 +115,8 @@ void QTWAINContext::fetchScannerList()
|
|
|
if (result == TWRC_SUCCESS) {
|
|
|
m_scannerList[QString(m_appIdentity.ProductName)] = std::shared_ptr<QTWAINScanner>(new QTWAINScanner(scanner_p));
|
|
|
} else {
|
|
|
+ updateStatus();
|
|
|
+ qDebug() << "Unable to add scanner: " << m_status.ConditionCode;
|
|
|
delete scanner_p;
|
|
|
}
|
|
|
scanner_p = new QTWAINScannerPrivate(this);
|
|
@@ -120,12 +126,21 @@ void QTWAINContext::fetchScannerList()
|
|
|
|
|
|
bool QTWAINContext::openDS(TW_IDENTITY *dataSource)
|
|
|
{
|
|
|
- return TWRC_SUCCESS == m_dsm->entry(&m_appIdentity, nullptr, DG_CONTROL, DAT_IDENTITY, MSG_OPENDS, dataSource);
|
|
|
+ if (TWRC_SUCCESS != m_dsm->entry(&m_appIdentity, nullptr, DG_CONTROL, DAT_IDENTITY, MSG_OPENDS, dataSource)) {
|
|
|
+ updateStatus();
|
|
|
+ qDebug() << "Unable to open scanner: " << m_status.ConditionCode;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
void QTWAINContext::closeDS(TW_IDENTITY *dataSource)
|
|
|
{
|
|
|
- m_dsm->entry(&m_appIdentity, nullptr, DG_CONTROL, DAT_IDENTITY, MSG_CLOSEDS, dataSource);
|
|
|
+ if (TWRC_SUCCESS != m_dsm->entry(&m_appIdentity, nullptr, DG_CONTROL, DAT_IDENTITY, MSG_CLOSEDS, dataSource)) {
|
|
|
+ updateStatus();
|
|
|
+ qDebug() << "Unable to close scanner: " << m_status.ConditionCode;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
bool QTWAINContext::enableDS(TW_IDENTITY *dataSource)
|
|
@@ -134,14 +149,25 @@ bool QTWAINContext::enableDS(TW_IDENTITY *dataSource)
|
|
|
memset(&uiSettings, 0, sizeof(uiSettings));
|
|
|
uiSettings.ShowUI = true;
|
|
|
uiSettings.hParent = m_windowHandle;
|
|
|
- return TWRC_SUCCESS == m_dsm->entry(&m_appIdentity, dataSource, DG_CONTROL, DAT_USERINTERFACE, MSG_ENABLEDS, &uiSettings);
|
|
|
+ if (TWRC_SUCCESS != m_dsm->entry(&m_appIdentity, dataSource, DG_CONTROL, DAT_USERINTERFACE, MSG_ENABLEDS, &uiSettings)) {
|
|
|
+ updateStatus();
|
|
|
+ qDebug() << "Unable to enable scanner: " << m_status.ConditionCode;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
bool QTWAINContext::disableDS(TW_IDENTITY *dataSource)
|
|
|
{
|
|
|
TW_USERINTERFACE uiSettings;
|
|
|
memset(&uiSettings, 0, sizeof(uiSettings));
|
|
|
- return TWRC_SUCCESS == m_dsm->entry(&m_appIdentity, dataSource, DG_CONTROL, DAT_USERINTERFACE, MSG_DISABLEDS, &uiSettings);
|
|
|
+ if (TWRC_SUCCESS != m_dsm->entry(&m_appIdentity, dataSource, DG_CONTROL, DAT_USERINTERFACE, MSG_DISABLEDS, &uiSettings)) {
|
|
|
+ updateStatus();
|
|
|
+ qDebug() << "Unable to disable scanner: " << m_status.ConditionCode;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -152,7 +178,12 @@ bool QTWAINContext::processEvent(TW_EVENT *event, TW_IDENTITY *dataSource)
|
|
|
|
|
|
bool QTWAINContext::imageInfo(TW_IMAGEINFO *info, TW_IDENTITY *dataSource)
|
|
|
{
|
|
|
- return TWRC_SUCCESS == m_dsm->entry(&m_appIdentity, dataSource, DG_IMAGE, DAT_IMAGEINFO, MSG_GET, info);
|
|
|
+ if (TWRC_SUCCESS != m_dsm->entry(&m_appIdentity, dataSource, DG_IMAGE, DAT_IMAGEINFO, MSG_GET, info)) {
|
|
|
+ updateStatus();
|
|
|
+ qDebug() << "Unable to get information about image: " << m_status.ConditionCode;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
quint16 QTWAINContext::imageNativeTransfer(TW_HANDLE *imgHandle, TW_IDENTITY *dataSource)
|
|
@@ -162,5 +193,15 @@ quint16 QTWAINContext::imageNativeTransfer(TW_HANDLE *imgHandle, TW_IDENTITY *da
|
|
|
|
|
|
bool QTWAINContext::endTransfer(TW_PENDINGXFERS *pendingTransfers, TW_IDENTITY *dataSource)
|
|
|
{
|
|
|
- return TWRC_SUCCESS == m_dsm->entry(&m_appIdentity, dataSource, DG_CONTROL, DAT_PENDINGXFERS, MSG_ENDXFER, pendingTransfers);
|
|
|
+ if (TWRC_SUCCESS != m_dsm->entry(&m_appIdentity, dataSource, DG_CONTROL, DAT_PENDINGXFERS, MSG_ENDXFER, pendingTransfers)) {
|
|
|
+ updateStatus();
|
|
|
+ qDebug() << "Unable to complete image transfer: " << m_status.ConditionCode;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+void QTWAINContext::updateStatus(TW_IDENTITY *dataSource)
|
|
|
+{
|
|
|
+ QtTWAIN::QDSMInterface::instance()->entry(&m_appIdentity, dataSource, DG_CONTROL, DAT_STATUS, MSG_GET, &m_status);
|
|
|
}
|