diff --git a/Spec/CapOrderForWeb.PDF b/Spec/CapOrderForWeb.PDF deleted file mode 100644 index 5c05022..0000000 Binary files a/Spec/CapOrderForWeb.PDF and /dev/null differ diff --git a/Tests/Tester.WPF/App.xaml b/Tests/Tester.WPF/App.xaml index ec78fb5..d733b8c 100644 --- a/Tests/Tester.WPF/App.xaml +++ b/Tests/Tester.WPF/App.xaml @@ -14,6 +14,24 @@ + diff --git a/Tests/Tester.WPF/CapVM.cs b/Tests/Tester.WPF/CapVM.cs new file mode 100644 index 0000000..ea5bae9 --- /dev/null +++ b/Tests/Tester.WPF/CapVM.cs @@ -0,0 +1,33 @@ +using NTwain.Values; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Tester.WPF +{ + /// + /// Wraps a capability as a view model. + /// + class CapVM + { + public CapabilityId Cap { get; set; } + + public string Name + { + get + { + if (Cap > CapabilityId.CustomBase) + { + return "[Custom] " + ((int)Cap - (int)CapabilityId.CustomBase); + } + return Cap.ToString(); + } + } + + public override string ToString() + { + return Name; + } + } +} diff --git a/Tests/Tester.WPF/DSVM.cs b/Tests/Tester.WPF/DSVM.cs new file mode 100644 index 0000000..3cc74d0 --- /dev/null +++ b/Tests/Tester.WPF/DSVM.cs @@ -0,0 +1,20 @@ +using NTwain.Data; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Tester.WPF +{ + /// + /// Wraps a data source as view model. + /// + class DSVM + { + public TWIdentity DS { get; set; } + + public string Name { get { return DS.ProductName; } } + public string Version { get { return DS.Version.Info; } } + public string Protocol { get { return string.Format("{0}.{1}", DS.ProtocolMajor, DS.ProtocolMinor); } } + } +} diff --git a/Tests/Tester.WPF/MainWindow.xaml b/Tests/Tester.WPF/MainWindow.xaml index f36004f..b848397 100644 --- a/Tests/Tester.WPF/MainWindow.xaml +++ b/Tests/Tester.WPF/MainWindow.xaml @@ -2,7 +2,8 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:modern="http://modernwpf" - Title="TWAIN Tester" Height="600" Width="900" ResizeMode="CanResizeWithGrip" + Title="TWAIN DS Tester" Height="600" Width="900" ResizeMode="CanResizeWithGrip" + modern:Chrome.ShowCaptionIcon="False" Style="{StaticResource AppWindow}"> @@ -17,22 +18,29 @@ - + - + + + + + - + - + @@ -41,8 +49,9 @@ - + diff --git a/Tests/Tester.WPF/MainWindow.xaml.cs b/Tests/Tester.WPF/MainWindow.xaml.cs index 84b2204..1bcee9a 100644 --- a/Tests/Tester.WPF/MainWindow.xaml.cs +++ b/Tests/Tester.WPF/MainWindow.xaml.cs @@ -28,7 +28,8 @@ namespace Tester.WPF /// public partial class MainWindow : Window { - TwainSessionWPF twain; + TwainVM _twainVM; + public MainWindow() { InitializeComponent(); @@ -41,14 +42,19 @@ namespace Tester.WPF Title = Title + " (32bit)"; } - SetupTwain(); + _twainVM = new TwainVM(); + _twainVM.SourceDisabled += delegate + { + ModernMessageBox.Show(this, "Success!"); + }; + this.DataContext = _twainVM; } protected override void OnClosed(EventArgs e) { - if (twain.State == 4) + if (_twainVM.State == 4) { - twain.CloseSource(); + _twainVM.CloseSource(); } base.OnClosed(e); } @@ -58,89 +64,38 @@ namespace Tester.WPF base.OnSourceInitialized(e); var hwnd = new WindowInteropHelper(this).Handle; - HwndSource.FromHwnd(hwnd).AddHook(twain.PreFilterMessage); - var rc = twain.OpenManager(hwnd); + // this line is unnecessary if using twain 2 dsm but doesn't hurt to use it + HwndSource.FromHwnd(hwnd).AddHook(_twainVM.PreFilterMessage); + + var rc = _twainVM.OpenManager(hwnd); if (rc == ReturnCode.Success) { - SrcList.ItemsSource = twain.GetSources(); + SrcList.ItemsSource = _twainVM.GetSources().Select(s => new DSVM { DS = s }); } } - - private void SetupTwain() - { - TWIdentity appId = TWIdentity.CreateFromAssembly(DataGroups.Image, Assembly.GetEntryAssembly()); - twain = new TwainSessionWPF(appId); - twain.DataTransferred += (s, e) => - { - if (e.Data != IntPtr.Zero) - { - ImageDisplay.Source = e.Data.GetWPFBitmap(); - } - else if (!string.IsNullOrEmpty(e.FilePath)) - { - var img = new BitmapImage(new Uri(e.FilePath)); - ImageDisplay.Source = img; - } - }; - - twain.SourceDisabled += delegate - { - ModernMessageBox.Show(this, "Success!"); - }; - twain.TransferReady += (s, te) => - { - if (twain.GetCurrentCap(CapabilityId.ICapXferMech) == XferMech.File) - { - var formats = twain.CapGetImageFileFormat(); - var wantFormat = formats.Contains(FileFormat.Tiff) ? FileFormat.Tiff : FileFormat.Bmp; - - var fileSetup = new TWSetupFileXfer - { - Format = wantFormat, - FileName = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.tif") - }; - var rc = twain.DGControl.SetupFileXfer.Set(fileSetup); - } - }; - this.DataContext = twain; - } - private void Button_Click_1(object sender, RoutedEventArgs e) { - if (twain.State == 4) - { - if (twain.CapGetPixelTypes().Contains(PixelType.BlackWhite)) - { - twain.CapSetPixelType(PixelType.BlackWhite); - } - - if (twain.CapGetImageXferMechs().Contains(XferMech.File)) - { - twain.CapSetImageXferMech(XferMech.File); - } - - var rc = twain.EnableSource(SourceEnableMode.NoUI, false, new WindowInteropHelper(this).Handle, SynchronizationContext.Current); - } + _twainVM.TestCapture(new WindowInteropHelper(this).Handle); } private void SrcList_SelectionChanged(object sender, SelectionChangedEventArgs e) { - if (twain.State == 4) + if (_twainVM.State == 4) { - twain.CloseSource(); + _twainVM.CloseSource(); } - var dsId = SrcList.SelectedItem as TWIdentity; + var dsId = SrcList.SelectedItem as DSVM; if (dsId != null) { - var rc = twain.OpenSource(dsId.ProductName); + var rc = _twainVM.OpenSource(dsId.Name); //rc = DGControl.Status.Get(dsId, ref stat); if (rc == ReturnCode.Success) { - var caps = twain.SupportedCaps.Select(o => new CapVM + var caps = _twainVM.SupportedCaps.Select(o => new CapVM { - Id = o + Cap = o }).OrderBy(o => o.Name).ToList(); CapList.ItemsSource = caps; } @@ -151,534 +106,515 @@ namespace Tester.WPF } } - class CapVM - { - public CapabilityId Id { get; set; } - public string Name - { - get - { - if (Id > CapabilityId.CustomBase) - { - return "[Custom] " + ((int)Id - (int)CapabilityId.CustomBase); - } - return Id.ToString(); - } - } - public override string ToString() - { - return Name; - } - } private void CapList_SelectionChanged(object sender, SelectionChangedEventArgs e) { var capVM = CapList.SelectedItem as CapVM; if (capVM != null) { - var cap = capVM.Id; + var cap = capVM.Cap; switch (cap) { case CapabilityId.ACapXferMech: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapAlarms: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapAlarmVolume: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; //case CapabilityId.CapAuthor: - // CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + // CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); // break; case CapabilityId.CapAutoFeed: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapAutomaticCapture: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapAutomaticSenseMedium: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapAutoScan: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapBatteryMinutes: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapBatteryPercentage: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapCameraEnabled: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapCameraOrder: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapCameraPreviewUI: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapCameraSide: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; //case CapabilityId.CapCaption: - // CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + // CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); // break; case CapabilityId.CapClearBuffers: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapClearPage: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapCustomDSData: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; //case CapabilityId.CapCustomInterfaceGuid: - // CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + // CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); // break; case CapabilityId.CapDeviceEvent: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapDeviceOnline: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapDeviceTimeDate: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapDoubleFeedDetection: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapDoubleFeedDetectionLength: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapDoubleFeedDetectionResponse: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapDoubleFeedDetectionSensitivity: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapDuplex: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapDuplexEnabled: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapEnableDSUIOnly: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; //case CapabilityId.CapEndorser: - // CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + // CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); // break; case CapabilityId.CapExtendedCaps: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapFeederAlignment: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapFeederEnabled: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapFeederLoaded: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapFeederOrder: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapFeederPocket: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapFeederPrep: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapFeedPage: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapIndicators: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapIndicatorsMode: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapJobControl: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapLanguage: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapMaxBatchBuffers: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapMicrEnabled: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPaperDetectable: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPaperHandling: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPowerSaveTime: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPowerSupply: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPrinter: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPrinterCharRotation: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPrinterEnabled: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPrinterFontStyle: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPrinterIndex: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPrinterIndexLeadChar: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPrinterIndexMaxValue: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPrinterIndexNumDigits: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPrinterIndexStep: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPrinterIndexTrigger: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapPrinterMode: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; //case CapabilityId.CapPrinterString: - // CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + // CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); // break; //case CapabilityId.CapPrinterStringPreview: - // CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + // CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); // break; //case CapabilityId.CapPrinterSuffix: - // CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + // CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); // break; case CapabilityId.CapPrinterVerticalOffset: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapReacquireAllowed: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapRewindPage: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapSegmented: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; //case CapabilityId.CapSerialNumber: - // CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + // CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); // break; //case CapabilityId.CapSupportedCaps: - // CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + // CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); // break; case CapabilityId.CapSupportedCapsSegmentUnique: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapSupportedDATs: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapThumbnailsEnabled: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapTimeBeforeFirstCapture: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapTimeBetweenCaptures: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapTimeDate: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapUIControllable: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.CapXferCount: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); // spec says ushort but who knows + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); // spec says ushort but who knows break; case CapabilityId.CustomBase: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapAutoBright: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapAutoDiscardBlankPages: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapAutomaticBorderDetection: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapAutomaticColorEnabled: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapAutomaticColorNonColorPixelType: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapAutomaticCropUsesFrame: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapAutomaticDeskew: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapAutomaticLengthDetection: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapAutomaticRotate: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapAutoSize: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapBarcodeDetectionEnabled: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapBarcodeMaxRetries: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapBarcodeMaxSearchPriorities: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapBarcodeSearchMode: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapBarcodeSearchPriorities: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapBarcodeTimeout: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapBitDepth: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapBitDepthReduction: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapBitOrder: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapBitOrderCodes: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapBrightness: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapCCITTKFactor: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapColorManagementEnabled: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapCompression: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapContrast: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapCustHalftone: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapExposureTime: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapExtImageInfo: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapFeederType: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapFilmType: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapFilter: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapFlashUsed: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapFlashUsed2: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapFlipRotation: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; //case CapabilityId.ICapFrames: - // CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + // CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); // break; case CapabilityId.ICapGamma: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapHalftones: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapHighlight: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapICCProfile: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapImageDataset: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapImageFileFormat: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapImageFilter: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapImageMerge: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapImageMergeHeightThreshold: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapJpegPixelType: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapJpegQuality: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapJpegSubSampling: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapLampState: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapLightPath: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapLightSource: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapMaxFrames: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapMinimumHeight: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapMinimumWidth: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapMirror: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapNoiseFilter: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapOrientation: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapOverScan: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapPatchCodeDetectionEnabled: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapPatchCodeMaxRetries: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapPatchCodeMaxSearchPriorities: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapPatchCodeSearchMode: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapPatchCodeSearchPriorities: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapPatchCodeTimeout: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; // TODO phys size are twfix32 case CapabilityId.ICapPhysicalHeight: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapPhysicalWidth: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapPixelFlavor: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapPixelFlavorCodes: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapPixelType: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapPlanarChunky: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapRotation: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapShadow: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapSupportedBarcodeTypes: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapSupportedExtImageInfo: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapSupportedPatchCodeTypes: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapSupportedSizes: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapThreshold: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapTiles: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapTimeFill: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapUndefinedImageSize: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapUnits: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapXferMech: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapXNativeResolution: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapXResolution: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapXScaling: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapYNativeResolution: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapYResolution: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapYScaling: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; case CapabilityId.ICapZoomFactor: - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); break; default: if (cap > CapabilityId.CustomBase) { - CapDetailList.ItemsSource = twain.GetCapabilityValues(cap, true); + CapDetailList.ItemsSource = _twainVM.GetCapabilityValues(cap, true); } else { diff --git a/Tests/Tester.WPF/Tester.WPF.csproj b/Tests/Tester.WPF/Tester.WPF.csproj index 56dc035..4daa138 100644 --- a/Tests/Tester.WPF/Tester.WPF.csproj +++ b/Tests/Tester.WPF/Tester.WPF.csproj @@ -68,6 +68,7 @@ MSBuild:Compile Designer + MSBuild:Compile Designer @@ -76,6 +77,8 @@ App.xaml Code + + MainWindow.xaml Code diff --git a/Tests/Tester.WPF/TwainVM.cs b/Tests/Tester.WPF/TwainVM.cs new file mode 100644 index 0000000..529d86b --- /dev/null +++ b/Tests/Tester.WPF/TwainVM.cs @@ -0,0 +1,96 @@ +using NTwain; +using NTwain.Data; +using NTwain.Values; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using CommonWin32; +using System.Threading; + +namespace Tester.WPF +{ + /// + /// Wraps the twain session as a view model for databinding. + /// + class TwainVM : TwainSessionWPF + { + public TwainVM() + : base(TWIdentity.CreateFromAssembly(DataGroups.Image | DataGroups.Audio, Assembly.GetEntryAssembly())) + { + + } + + private ImageSource _image; + + /// + /// Gets or sets the captured image. + /// + /// + /// The image. + /// + public ImageSource Image + { + get { return _image; } + set + { + _image = value; + RaisePropertyChanged("Image"); + } + } + + protected override void OnTransferReady(TransferReadyEventArgs e) + { + // set it up to use file xfer + + if (this.GetCurrentCap(CapabilityId.ICapXferMech) == XferMech.File) + { + var formats = this.CapGetImageFileFormat(); + var wantFormat = formats.Contains(FileFormat.Tiff) ? FileFormat.Tiff : FileFormat.Bmp; + + var fileSetup = new TWSetupFileXfer + { + Format = wantFormat, + FileName = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.tif") + }; + var rc = this.DGControl.SetupFileXfer.Set(fileSetup); + } + base.OnTransferReady(e); + } + + protected override void OnDataTransferred(DataTransferredEventArgs e) + { + if (e.Data != IntPtr.Zero) + { + Image = e.Data.GetWPFBitmap(); + } + else if (!string.IsNullOrEmpty(e.FilePath)) + { + var img = new BitmapImage(new Uri(e.FilePath)); + Image = img; + } + base.OnDataTransferred(e); + } + + public void TestCapture(IntPtr hwnd) + { + if (State == 4) + { + if (this.CapGetPixelTypes().Contains(PixelType.BlackWhite)) + { + this.CapSetPixelType(PixelType.BlackWhite); + } + + if (this.CapGetImageXferMechs().Contains(XferMech.File)) + { + this.CapSetImageXferMech(XferMech.File); + } + + var rc = EnableSource(SourceEnableMode.NoUI, false, hwnd, SynchronizationContext.Current); + } + } + } +}