twain: Add a property sheet UI for scanning.
This commit is contained in:
parent
bec4990cab
commit
8358c63e15
|
@ -1 +1,2 @@
|
||||||
Makefile
|
Makefile
|
||||||
|
rsrc.res
|
||||||
|
|
|
@ -3,7 +3,7 @@ TOPOBJDIR = ../..
|
||||||
SRCDIR = @srcdir@
|
SRCDIR = @srcdir@
|
||||||
VPATH = @srcdir@
|
VPATH = @srcdir@
|
||||||
MODULE = twain_32.dll
|
MODULE = twain_32.dll
|
||||||
IMPORTS = user32 gdi32 kernel32 ntdll
|
IMPORTS = comctl32 user32 gdi32 kernel32 ntdll
|
||||||
EXTRALIBS = @SANELIBS@
|
EXTRALIBS = @SANELIBS@
|
||||||
EXTRAINCL = @SANEINCL@
|
EXTRAINCL = @SANEINCL@
|
||||||
|
|
||||||
|
@ -13,11 +13,15 @@ C_SRCS = \
|
||||||
ds_ctrl.c \
|
ds_ctrl.c \
|
||||||
ds_image.c \
|
ds_image.c \
|
||||||
dsm_ctrl.c \
|
dsm_ctrl.c \
|
||||||
twain32_main.c
|
twain32_main.c \
|
||||||
|
ui.c
|
||||||
|
|
||||||
C_SRCS16 = \
|
C_SRCS16 = \
|
||||||
twain16_main.c
|
twain16_main.c
|
||||||
|
|
||||||
|
RC_SRCS = \
|
||||||
|
rsrc.rc
|
||||||
|
|
||||||
SPEC_SRCS16 = twain.spec
|
SPEC_SRCS16 = twain.spec
|
||||||
|
|
||||||
@MAKE_DLL_RULES@
|
@MAKE_DLL_RULES@
|
||||||
|
|
|
@ -647,11 +647,20 @@ TW_UINT16 TWAIN_EnableDSUserInterface (pTW_IDENTITY pOrigin,
|
||||||
{
|
{
|
||||||
if (pUserInterface->ShowUI)
|
if (pUserInterface->ShowUI)
|
||||||
{
|
{
|
||||||
|
BOOL rc;
|
||||||
pSource->currentState = 5; /* Transitions to state 5 */
|
pSource->currentState = 5; /* Transitions to state 5 */
|
||||||
/* FIXME: we should replace xscanimage with our own device UI */
|
rc = DoScannerUI(pSource);
|
||||||
system ("xscanimage");
|
if (!rc)
|
||||||
pSource->currentState = 6;
|
{
|
||||||
pSource->pendingEvent.TWMessage = MSG_XFERREADY;
|
pSource->pendingEvent.TWMessage = MSG_CLOSEDSREQ;
|
||||||
|
}
|
||||||
|
#ifdef HAVE_SANE
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sane_get_parameters (pSource->deviceHandle, &pSource->sane_param);
|
||||||
|
pSource->sane_param_valid = TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -223,6 +223,12 @@ TW_UINT16 TWAIN_ImageMemXferGet (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest,
|
||||||
/* Transfer an image from the source to the application */
|
/* Transfer an image from the source to the application */
|
||||||
if (pSource->currentState == 6)
|
if (pSource->currentState == 6)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/* trigger scanning dialog */
|
||||||
|
pSource->progressWnd = ScanningDialogBox(NULL,0);
|
||||||
|
|
||||||
|
ScanningDialogBox(pSource->progressWnd,0);
|
||||||
|
|
||||||
status = sane_start (pSource->deviceHandle);
|
status = sane_start (pSource->deviceHandle);
|
||||||
if (status != SANE_STATUS_GOOD)
|
if (status != SANE_STATUS_GOOD)
|
||||||
{
|
{
|
||||||
|
@ -295,8 +301,11 @@ TW_UINT16 TWAIN_ImageMemXferGet (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest,
|
||||||
pImageMemXfer->YOffset = 0;
|
pImageMemXfer->YOffset = 0;
|
||||||
pImageMemXfer->BytesWritten = consumed_len;
|
pImageMemXfer->BytesWritten = consumed_len;
|
||||||
|
|
||||||
|
ScanningDialogBox(pSource->progressWnd, consumed_len);
|
||||||
|
|
||||||
if (status == SANE_STATUS_EOF)
|
if (status == SANE_STATUS_EOF)
|
||||||
{
|
{
|
||||||
|
ScanningDialogBox(pSource->progressWnd, -1);
|
||||||
TRACE("sane_read: %s\n", sane_strstatus (status));
|
TRACE("sane_read: %s\n", sane_strstatus (status));
|
||||||
sane_cancel (pSource->deviceHandle);
|
sane_cancel (pSource->deviceHandle);
|
||||||
twRC = TWRC_XFERDONE;
|
twRC = TWRC_XFERDONE;
|
||||||
|
@ -305,6 +314,7 @@ TW_UINT16 TWAIN_ImageMemXferGet (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest,
|
||||||
}
|
}
|
||||||
else if (status != SANE_STATUS_EOF)
|
else if (status != SANE_STATUS_EOF)
|
||||||
{
|
{
|
||||||
|
ScanningDialogBox(pSource->progressWnd, -1);
|
||||||
WARN("sane_read: %s\n", sane_strstatus (status));
|
WARN("sane_read: %s\n", sane_strstatus (status));
|
||||||
sane_cancel (pSource->deviceHandle);
|
sane_cancel (pSource->deviceHandle);
|
||||||
pSource->twCC = TWCC_OPERATIONERROR;
|
pSource->twCC = TWCC_OPERATIONERROR;
|
||||||
|
|
|
@ -304,6 +304,7 @@ TW_UINT16 TWAIN_OpenDS (pTW_IDENTITY pOrigin, TW_MEMREF pData)
|
||||||
newSource = HeapAlloc (GetProcessHeap(), 0, sizeof (activeDS));
|
newSource = HeapAlloc (GetProcessHeap(), 0, sizeof (activeDS));
|
||||||
if (newSource)
|
if (newSource)
|
||||||
{
|
{
|
||||||
|
newSource->deviceIndex = i;
|
||||||
status = sane_open(device_list[i]->name,&newSource->deviceHandle);
|
status = sane_open(device_list[i]->name,&newSource->deviceHandle);
|
||||||
if (status == SANE_STATUS_GOOD)
|
if (status == SANE_STATUS_GOOD)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* Twain resource definitions
|
||||||
|
*
|
||||||
|
* Copyright 2006 CodeWeavers, Aric Stewart
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define IDD_DIALOG1 0x400
|
||||||
|
|
||||||
|
#define IDC_STATIC 0x401
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* Top level resource file for Twain
|
||||||
|
*
|
||||||
|
* Copyright 2006 CodeWeavers, Aric Stewart
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "windef.h"
|
||||||
|
#include "winbase.h"
|
||||||
|
#include "winuser.h"
|
||||||
|
#include "winnls.h"
|
||||||
|
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
#include "twain_En.rc"
|
|
@ -39,6 +39,7 @@ BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
||||||
case DLL_PROCESS_ATTACH:
|
case DLL_PROCESS_ATTACH:
|
||||||
DisableThreadLibraryCalls(hinstDLL);
|
DisableThreadLibraryCalls(hinstDLL);
|
||||||
DSM_currentState = 2;
|
DSM_currentState = 2;
|
||||||
|
DSM_instance = hinstDLL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DLL_PROCESS_DETACH:
|
case DLL_PROCESS_DETACH:
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* English resources for Twain
|
||||||
|
*
|
||||||
|
* Copyright 2006 CodeWeavers, Aric Stewart
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
|
||||||
|
|
||||||
|
IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 46
|
||||||
|
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | DS_CENTER | DS_SETFOREGROUND
|
||||||
|
CAPTION "Scanning"
|
||||||
|
FONT 8, "MS Sans Serif"
|
||||||
|
BEGIN
|
||||||
|
LTEXT "SCANNING.... Please Wait",IDC_STATIC,53,19,85,8
|
||||||
|
END
|
||||||
|
|
||||||
|
STRINGTABLE DISCARDABLE
|
||||||
|
{
|
||||||
|
0 ""
|
||||||
|
1 "px"
|
||||||
|
2 "b"
|
||||||
|
3 "mm"
|
||||||
|
4 "dpi"
|
||||||
|
5 "%"
|
||||||
|
6 "ns"
|
||||||
|
}
|
|
@ -42,11 +42,13 @@ typedef struct tagActiveDS
|
||||||
application */
|
application */
|
||||||
TW_UINT16 twCC; /* condition code */
|
TW_UINT16 twCC; /* condition code */
|
||||||
HWND hwndOwner; /* window handle of the app */
|
HWND hwndOwner; /* window handle of the app */
|
||||||
|
HWND progressWnd; /* window handle of the scanning window */
|
||||||
#ifdef HAVE_SANE
|
#ifdef HAVE_SANE
|
||||||
SANE_Handle deviceHandle; /* device handle */
|
SANE_Handle deviceHandle; /* device handle */
|
||||||
SANE_Parameters sane_param; /* parameters about the image
|
SANE_Parameters sane_param; /* parameters about the image
|
||||||
transferred */
|
transferred */
|
||||||
BOOL sane_param_valid; /* true if valid sane_param*/
|
BOOL sane_param_valid; /* true if valid sane_param*/
|
||||||
|
INT deviceIndex; /* index of the current device */
|
||||||
#endif
|
#endif
|
||||||
/* Capabiblities */
|
/* Capabiblities */
|
||||||
TW_UINT16 capXferMech; /* ICAP_XFERMECH */
|
TW_UINT16 capXferMech; /* ICAP_XFERMECH */
|
||||||
|
@ -58,6 +60,8 @@ TW_UINT16 DSM_twCC; /* current condition code of Source Manager */
|
||||||
TW_HANDLE DSM_parentHWND; /* window handle of the Source's "parent" */
|
TW_HANDLE DSM_parentHWND; /* window handle of the Source's "parent" */
|
||||||
TW_UINT32 DSM_sourceId; /* source id generator */
|
TW_UINT32 DSM_sourceId; /* source id generator */
|
||||||
TW_UINT16 DSM_currentDevice; /* keep track of device during enumeration */
|
TW_UINT16 DSM_currentDevice; /* keep track of device during enumeration */
|
||||||
|
HINSTANCE DSM_instance;
|
||||||
|
|
||||||
#ifdef HAVE_SANE
|
#ifdef HAVE_SANE
|
||||||
const SANE_Device **device_list;/* a list of all sane devices */
|
const SANE_Device **device_list;/* a list of all sane devices */
|
||||||
#endif
|
#endif
|
||||||
|
@ -244,4 +248,8 @@ TW_UINT16 TWAIN_AudioNativeXferGet
|
||||||
TW_UINT16 TWAIN_ICAPXferMech
|
TW_UINT16 TWAIN_ICAPXferMech
|
||||||
(activeDS *pSource, pTW_CAPABILITY pCapability, TW_UINT16 action);
|
(activeDS *pSource, pTW_CAPABILITY pCapability, TW_UINT16 action);
|
||||||
|
|
||||||
|
/* UI function */
|
||||||
|
BOOL DoScannerUI(activeDS *pSource);
|
||||||
|
HWND ScanningDialogBox(HWND dialog, DWORD progress);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue