diff --git a/NTwain.Net35/NTwain.Net35.csproj b/NTwain.Net35/NTwain.Net35.csproj index 50a5517..b161d0e 100644 --- a/NTwain.Net35/NTwain.Net35.csproj +++ b/NTwain.Net35/NTwain.Net35.csproj @@ -45,9 +45,15 @@ + + CapabilityControl.cs + CapabilityReader.cs + + CapRoutines.cs + DataSource.Caps.cs diff --git a/NTwain/CapRoutines.cs b/NTwain/CapRoutines.cs new file mode 100644 index 0000000..d90de9c --- /dev/null +++ b/NTwain/CapRoutines.cs @@ -0,0 +1,74 @@ +using NTwain.Data; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace NTwain +{ + /// + /// Contains re-usable routines for cap use. + /// + public static class CapRoutines + { + #region handy conversions + + /// + /// Routine that does nothing. + /// + /// The value. + /// + public static object NoConvertRoutine(object value) + { + return value; + } + + /// + /// Predefined routine for + /// + /// The value. + /// + public static TEnum EnumRoutine(object value) where TEnum : struct, IConvertible + { + if (value != null) + { + return value.ConvertToEnum(); + } + return default(TEnum); + } + + /// + /// Predefined routine for + /// + /// The value. + /// + public static TWFix32 TWFix32Routine(object value) + { + if (value != null) + { + if (value is TWFix32) + { + return (TWFix32)value; + } + return Convert.ToSingle(value); + } + return default(TWFix32); + } + + /// + /// Predefined routine for + /// + /// The value. + /// + public static string StringRoutine(object value) + { + if (value != null) + { + return value.ToString(); + } + return default(string); + } + + #endregion + } +} diff --git a/NTwain/CapabilityControl.cs b/NTwain/CapabilityControl.cs new file mode 100644 index 0000000..a09f44d --- /dev/null +++ b/NTwain/CapabilityControl.cs @@ -0,0 +1,245 @@ +using NTwain.Data; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace NTwain +{ + /// + /// Wrapped class for reading/writing a TWAIN capability associated with a . + /// + /// The TWAIN type of the value. + public class CapabilityControl + { + DataSource _source; + Func _converter; + Func _setProvider; + + /// + /// Initializes a new instance of the class. + /// + /// The source. + /// The capability. + /// The value conversion routine. + /// Callback to provide the capability object for set method. + /// source + public CapabilityControl(DataSource source, CapabilityId capability, Func valueConversionRoutine, Func setCapProvider) + { + if (source == null) { throw new ArgumentNullException("source"); } + if (valueConversionRoutine == null) { throw new ArgumentNullException("valueConversionRoutine"); } + + _source = source; + _converter = valueConversionRoutine; + _setProvider = setCapProvider; + Capability = capability; + SupportedActions = source.CapQuerySupport(capability); + } + + bool Supports(QuerySupports flag) + { + return (SupportedActions & flag) == flag; + } + + #region properties + + /// + /// Gets the capability. + /// + /// + /// The capability. + /// + public CapabilityId Capability { get; private set; } + + /// + /// Gets the supported actions. + /// + /// + /// The supported actions. + /// + public QuerySupports SupportedActions { get; private set; } + + public bool IsSupported { get { return SupportedActions > QuerySupports.None; } } + public bool CanGet { get { return Supports(QuerySupports.Get); } } + public bool CanGetDefault { get { return Supports(QuerySupports.GetDefault); } } + public bool CanGetCurrent { get { return Supports(QuerySupports.GetCurrent); } } + public bool CanGetLabel { get { return Supports(QuerySupports.GetLabel); } } + public bool CanGetHelp { get { return Supports(QuerySupports.GetHelp); } } + public bool CanGetLabelEnum { get { return Supports(QuerySupports.GetLabelEnum); } } + public bool CanReset { get { return Supports(QuerySupports.Reset); } } + public bool CanSet { get { return Supports(QuerySupports.Set); } } + public bool CanSetConstraint { get { return Supports(QuerySupports.SetConstraint); } } + + #endregion + + #region get methods + + /// + /// Gets the default value of this capability. + /// + /// + public TValue GetDefault() + { + if (CanGetDefault) + { + return _converter(_source.CapGetDefault(Capability)); + } + return default(TValue); + } + + /// + /// Gets the current value of this capability. + /// + /// + public TValue GetCurrent() + { + if (CanGetCurrent) + { + return _converter(_source.CapGetCurrent(Capability)); + } + return default(TValue); + } + + /// + /// Gets all the possible values of this capability. + /// + /// + public IList Get() + { + if (CanGet) + { + return _source.CapGet(Capability).Select(o => _converter(o)).ToList(); + } + return new List(); + } + + /// + /// [Experimental] Gets the label value of this capability. + /// + /// + public string GetLabel() + { + object value = null; + if (CanGetLabel) + { + using (TWCapability cap = new TWCapability(Capability)) + { + var rc = _source.DGControl.Capability.GetLabel(cap); + if (rc == ReturnCode.Success) + { + var read = CapabilityReader.ReadValue(cap); + + switch (read.ContainerType) + { + case ContainerType.OneValue: + // most likely not correct + value = read.OneValue; + break; + } + } + } + } + return value == null ? null : value.ToString(); + } + + /// + /// [Experimental] Gets the help value of this capability. + /// + /// + public string GetHelp() + { + object value = null; + if (CanGetHelp) + { + using (TWCapability cap = new TWCapability(Capability)) + { + var rc = _source.DGControl.Capability.GetHelp(cap); + if (rc == ReturnCode.Success) + { + var read = CapabilityReader.ReadValue(cap); + + switch (read.ContainerType) + { + case ContainerType.OneValue: + // most likely not correct + value = read.OneValue; + break; + } + } + } + } + return value == null ? null : value.ToString(); + } + + /// + /// [Experimental] Gets the display names for possible values of this capability. + /// + /// + public IList GetLabelEnum() + { + var list = new List(); + if (CanGetLabelEnum) + { + using (TWCapability cap = new TWCapability(Capability)) + { + var rc = _source.DGControl.Capability.GetLabelEnum(cap); + if (rc == ReturnCode.Success) + { + cap.ReadMultiCapValues(list); + } + } + } + return list.Select(o => o.ToString()).ToList(); + } + + #endregion + + #region set methods + + /// + /// Resets all values and constraint to power-on defaults. + /// + /// + public ReturnCode ResetAll() + { + return _source.ResetAll(Capability); + } + + /// + /// Resets the current value to power-on default. + /// + /// + public ReturnCode Reset() + { + return _source.Reset(Capability); + } + + /// + /// Sets the current value of this capability. + /// + /// The value. + /// + public ReturnCode Set(TValue value) + { + ReturnCode rc = ReturnCode.Failure; + if (CanSet && _setProvider != null) + { + using (var cap = _setProvider(value)) + { + rc = _source.DGControl.Capability.Set(cap); + } + } + return rc; + } + + + #endregion + + public enum SetStrategy + { + Once, + Cascade, + Custom + } + } +} diff --git a/NTwain/CapabilityReader.cs b/NTwain/CapabilityReader.cs index 4680fb9..ded7794 100644 --- a/NTwain/CapabilityReader.cs +++ b/NTwain/CapabilityReader.cs @@ -8,7 +8,7 @@ using System.Runtime.InteropServices; namespace NTwain { /// - /// The one-stop class for reading raw TWAIN cap values. + /// The one-stop class for reading raw TWAIN cap values from the cap container. /// This contains all the properties for the 4 container types. /// public class CapabilityReader diff --git a/NTwain/Data/TwainTypesExtended.cs b/NTwain/Data/TwainTypesExtended.cs index f317288..d5573ad 100644 --- a/NTwain/Data/TwainTypesExtended.cs +++ b/NTwain/Data/TwainTypesExtended.cs @@ -1345,6 +1345,7 @@ namespace NTwain.Data /// This structure is used to pass specific information between the data source and the application /// through . /// + [DebuggerDisplay("Type = {ItemType}")] public partial struct TWInfo { /// diff --git a/NTwain/DataSource.Caps.cs b/NTwain/DataSource.Caps.cs index 8d9282b..c43b0e6 100644 --- a/NTwain/DataSource.Caps.cs +++ b/NTwain/DataSource.Caps.cs @@ -11,6 +11,8 @@ namespace NTwain partial class DataSource { + #region low-level cap stuff + /// /// Gets the actual supported operations for a capability. /// @@ -52,7 +54,7 @@ namespace NTwain switch (read.ContainerType) { case ContainerType.Enum: - if (read.CollectionValues != null) + if (read.CollectionValues != null && read.CollectionValues.Count > read.EnumCurrentIndex) { return read.CollectionValues[read.EnumCurrentIndex]; } @@ -74,13 +76,51 @@ namespace NTwain return null; } + /// + /// Gets the default value for a capability. + /// + /// The cap id. + /// + public object CapGetDefault(CapabilityId capId) + { + using (TWCapability cap = new TWCapability(capId)) + { + var rc = _session.DGControl.Capability.GetDefault(cap); + if (rc == ReturnCode.Success) + { + var read = CapabilityReader.ReadValue(cap); + + switch (read.ContainerType) + { + case ContainerType.Enum: + if (read.CollectionValues != null && read.CollectionValues.Count > read.EnumDefaultIndex) + { + return read.CollectionValues[read.EnumDefaultIndex]; + } + break; + case ContainerType.OneValue: + return read.OneValue; + case ContainerType.Range: + return read.RangeDefaultValue; + case ContainerType.Array: + // no source should ever return an array but anyway + if (read.CollectionValues != null) + { + return read.CollectionValues.FirstOrDefault(); + } + break; + } + } + } + return null; + } /// /// A general method that tries to get capability values from current . /// /// The capability unique identifier. /// - public IList CapGetValues(CapabilityId capabilityId) + public IList CapGet(CapabilityId capabilityId) { var list = new List(); using (TWCapability cap = new TWCapability(capabilityId)) @@ -94,155 +134,217 @@ namespace NTwain return list; } - #region xfer mech - /// - /// Gets the supported image for the current source. - /// Only call this at state 4 or higher. + /// Resets all values and constraint to power-on defaults. /// + /// The capability identifier. /// - public IList CapGetImageXferMech() + public ReturnCode ResetAll(CapabilityId capabilityId) { - return CapGetValues(CapabilityId.ICapXferMech).CastToEnum(true); - } - - #endregion - - #region compression - - /// - /// Gets the supported for the current source. - /// Only call this at state 4 or higher. - /// - /// - public IList CapGetCompression() - { - return CapGetValues(CapabilityId.ICapCompression).CastToEnum(true); - } - - /// - /// Change the image compression for the current source. - /// - /// The compression. - /// - public ReturnCode CapSetImageCompression(CompressionType compression) - { - using (TWCapability compressCap = new TWCapability(CapabilityId.ICapCompression, new TWOneValue { Item = (uint)compression, ItemType = ItemType.UInt16 })) + using (TWCapability cap = new TWCapability(capabilityId) { - return _session.DGControl.Capability.Set(compressCap); + ContainerType = ContainerType.DoNotCare + }) + { + var rc = DGControl.Capability.ResetAll(cap); + return rc; + } + } + + /// + /// Resets the current value to power-on default. + /// + /// The capability identifier. + /// + public ReturnCode Reset(CapabilityId capabilityId) + { + using (TWCapability cap = new TWCapability(capabilityId) + { + ContainerType = ContainerType.DoNotCare + }) + { + var rc = DGControl.Capability.Reset(cap); + return rc; } } #endregion - #region image format + #region high-level caps + + private CapabilityControl _imgXferMech; /// - /// Gets the supported for the current source. - /// Only call this at state 4 or higher. + /// Gets the property to work with image for the current source. /// - /// - public IList CapGetImageFileFormat() + /// + /// The image xfer mech. + /// + public CapabilityControl CapImageXferMech { - return CapGetValues(CapabilityId.ICapImageFileFormat).CastToEnum(true); - } - - /// - /// Change the image format for the current source. - /// - /// The format. - /// - public ReturnCode CapSetImageFormat(FileFormat format) - { - using (TWCapability formatCap = new TWCapability(CapabilityId.ICapImageFileFormat, new TWOneValue { Item = (uint)format, ItemType = ItemType.UInt16 })) + get { - return _session.DGControl.Capability.Set(formatCap); + if (_imgXferMech == null) + { + _imgXferMech = new CapabilityControl(this, CapabilityId.ICapXferMech, CapRoutines.EnumRoutine, + value => new TWCapability(CapabilityId.ICapXferMech, new TWOneValue + { + Item = (uint)value, + ItemType = ItemType.UInt16 + })); + } + return _imgXferMech; } } - #endregion - #region pixel type + private CapabilityControl _audXferMech; /// - /// Gets the supported for the current source. - /// Only call this at state 4 or higher. + /// Gets the property to work with audio for the current source. /// - /// - public IList CapGetPixelTypes() + /// + /// The audio xfer mech. + /// + public CapabilityControl CapAudioXferMech { - return CapGetValues(CapabilityId.ICapPixelType).CastToEnum(true); - } - - /// - /// Change the pixel type for the current source. - /// - /// The type. - /// - public ReturnCode CapSetPixelType(PixelType type) - { - var one = new TWOneValue(); - one.Item = (uint)type; - one.ItemType = ItemType.UInt16; - using (TWCapability dx = new TWCapability(CapabilityId.ICapPixelType, one)) + get { - return _session.DGControl.Capability.Set(dx); + if (_audXferMech == null) + { + _audXferMech = new CapabilityControl(this, CapabilityId.ACapXferMech, CapRoutines.EnumRoutine, + value => new TWCapability(CapabilityId.ACapXferMech, new TWOneValue + { + Item = (uint)value, + ItemType = ItemType.UInt16 + })); + } + return _audXferMech; } } - #endregion - #region xfer mech + private CapabilityControl _compression; /// - /// Gets the supported image for the current source. - /// Only call this at state 4 or higher. + /// Gets the property to work with image for the current source. /// - /// - public IList CapGetImageXferMechs() + /// + /// The image compression. + /// + public CapabilityControl CapImageCompression { - return CapGetValues(CapabilityId.ICapXferMech).CastToEnum(true); - } - - /// - /// Gets the supported audio for the current source. - /// Only call this at state 4 or higher. - /// - /// - public IList CapGetAudioXferMechs() - { - return CapGetValues(CapabilityId.ACapXferMech).CastToEnum(true); - } - - /// - /// Change the image xfer type for the current source. - /// - /// The type. - /// - public ReturnCode CapSetImageXferMech(XferMech type) - { - var one = new TWOneValue(); - one.Item = (uint)type; - one.ItemType = ItemType.UInt16; - using (TWCapability dx = new TWCapability(CapabilityId.ICapXferMech, one)) + get { - return _session.DGControl.Capability.Set(dx); + if (_compression == null) + { + _compression = new CapabilityControl(this, CapabilityId.ICapCompression, CapRoutines.EnumRoutine, + value => new TWCapability(CapabilityId.ICapCompression, new TWOneValue + { + Item = (uint)value, + ItemType = ItemType.UInt16 + })); + } + return _compression; } } + + private CapabilityControl _fileFormat; + /// - /// Change the audio xfer type for the current source. + /// Gets the property to work with image for the current source. /// - /// The type. - /// - public ReturnCode CapSetAudioXferMech(XferMech type) + /// + /// The image file format. + /// + public CapabilityControl CapImageFileFormat { - var one = new TWOneValue(); - one.Item = (uint)type; - one.ItemType = ItemType.UInt16; - using (TWCapability dx = new TWCapability(CapabilityId.ACapXferMech, one)) + get { - return _session.DGControl.Capability.Set(dx); + if (_fileFormat == null) + { + _fileFormat = new CapabilityControl(this, CapabilityId.ICapImageFileFormat, CapRoutines.EnumRoutine, + value => new TWCapability(CapabilityId.ICapImageFileFormat, new TWOneValue + { + Item = (uint)value, + ItemType = ItemType.UInt16 + })); + } + return _fileFormat; + } + } + + + private CapabilityControl _pixelType; + + /// + /// Gets the property to work with image for the current source. + /// + /// + /// The image pixel type. + /// + public CapabilityControl CapImagePixelType + { + get + { + if (_pixelType == null) + { + _pixelType = new CapabilityControl(this, CapabilityId.ICapPixelType, CapRoutines.EnumRoutine, + value => new TWCapability(CapabilityId.ICapPixelType, new TWOneValue + { + Item = (uint)value, + ItemType = ItemType.UInt16 + })); + } + return _pixelType; + } + } + + + private CapabilityControl _supportSize; + + /// + /// Gets the property to work with image for the current source. + /// + /// + /// The image supported size. + /// + public CapabilityControl CapImageSupportedSize + { + get + { + if (_supportSize == null) + { + _supportSize = new CapabilityControl(this, CapabilityId.ICapSupportedSizes, CapRoutines.EnumRoutine, + value => new TWCapability(CapabilityId.ICapSupportedSizes, new TWOneValue + { + Item = (uint)value, + ItemType = ItemType.UInt16 + })); + } + return _supportSize; + } + } + + + private CapabilityControl _autoDeskew; + + /// + /// Gets the property to work with image auto deskew flag for the current source. + /// + /// + /// The image supported size. + /// + public CapabilityControl CapImageAutoDeskew + { + get + { + if (_autoDeskew == null) + { + _autoDeskew = new CapabilityControl(this, CapabilityId.ICapAutomaticDeskew, CapRoutines.EnumRoutine, null); + } + return _autoDeskew; } } @@ -257,7 +359,7 @@ namespace NTwain /// public IList CapGetDPIs() { - var list = CapGetValues(CapabilityId.ICapXResolution); + var list = CapGet(CapabilityId.ICapXResolution); return list.Select(o => o.ConvertToFix32()).ToList(); } @@ -300,38 +402,6 @@ namespace NTwain #endregion - #region supported paper size - - /// - /// Gets the supported for the current source. - /// Only call this at state 4 or higher. - /// - /// - public IList CapGetSupportedSizes() - { - return CapGetValues(CapabilityId.ICapSupportedSizes).CastToEnum(true); - } - - /// - /// Change the supported paper size for the current source. - /// - /// The size. - /// - public ReturnCode CapSetSupportedSize(SupportedSize size) - { - var one = new TWOneValue(); - one.Item = (uint)size; - one.ItemType = ItemType.UInt16; - - using (TWCapability xres = new TWCapability(CapabilityId.ICapSupportedSizes, one)) - { - var rc = _session.DGControl.Capability.Set(xres); - return rc; - } - } - - #endregion - #region onesie flags /// diff --git a/NTwain/DataSource.cs b/NTwain/DataSource.cs index ea912d4..a3b3afe 100644 --- a/NTwain/DataSource.cs +++ b/NTwain/DataSource.cs @@ -185,7 +185,7 @@ namespace NTwain { if (_supportedCaps == null && _session.State > 3) { - _supportedCaps = CapGetValues(CapabilityId.CapSupportedCaps).CastToEnum(false); + _supportedCaps = CapGet(CapabilityId.CapSupportedCaps).CastToEnum(false); } return _supportedCaps ?? _emptyCapList; } diff --git a/NTwain/NTwain.csproj b/NTwain/NTwain.csproj index f6f459b..167aac2 100644 --- a/NTwain/NTwain.csproj +++ b/NTwain/NTwain.csproj @@ -55,7 +55,9 @@ + + diff --git a/Tests/Tester.WPF/MainWindow.xaml.cs b/Tests/Tester.WPF/MainWindow.xaml.cs index f69014d..e3bac44 100644 --- a/Tests/Tester.WPF/MainWindow.xaml.cs +++ b/Tests/Tester.WPF/MainWindow.xaml.cs @@ -133,505 +133,505 @@ namespace Tester.WPF switch (cap) { case CapabilityId.ACapXferMech: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapAlarms: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapAlarmVolume: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapAuthor: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapAutoFeed: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapAutomaticCapture: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapAutomaticSenseMedium: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapAutoScan: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapBatteryMinutes: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapBatteryPercentage: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapCameraEnabled: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapCameraOrder: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapCameraPreviewUI: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapCameraSide: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapCaption: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapClearBuffers: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapClearPage: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapCustomDSData: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapCustomInterfaceGuid: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapDeviceEvent: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapDeviceOnline: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapDeviceTimeDate: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapDoubleFeedDetection: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapDoubleFeedDetectionLength: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapDoubleFeedDetectionResponse: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapDoubleFeedDetectionSensitivity: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapDuplex: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapDuplexEnabled: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapEnableDSUIOnly: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapEndorser: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapExtendedCaps: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapFeederAlignment: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapFeederEnabled: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapFeederLoaded: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapFeederOrder: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapFeederPocket: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapFeederPrep: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapFeedPage: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapIndicators: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapIndicatorsMode: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapJobControl: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapLanguage: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapMaxBatchBuffers: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapMicrEnabled: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapPaperDetectable: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapPaperHandling: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapPowerSaveTime: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapPowerSupply: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapPrinter: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapPrinterCharRotation: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapPrinterEnabled: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapPrinterFontStyle: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapPrinterIndex: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapPrinterIndexLeadChar: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapPrinterIndexMaxValue: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapPrinterIndexNumDigits: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapPrinterIndexStep: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapPrinterIndexTrigger: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapPrinterMode: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapPrinterString: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapPrinterStringPreview: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapPrinterSuffix: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapPrinterVerticalOffset: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapReacquireAllowed: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapRewindPage: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapSegmented: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapSerialNumber: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapSupportedCaps: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.CapSupportedCapsSegmentUnique: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapSupportedDATs: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapThumbnailsEnabled: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapTimeBeforeFirstCapture: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapTimeBetweenCaptures: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapTimeDate: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapUIControllable: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CapXferCount: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.CustomBase: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapAutoBright: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapAutoDiscardBlankPages: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapAutomaticBorderDetection: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapAutomaticColorEnabled: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapAutomaticColorNonColorPixelType: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapAutomaticCropUsesFrame: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapAutomaticDeskew: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapAutomaticLengthDetection: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapAutomaticRotate: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapAutoSize: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapBarcodeDetectionEnabled: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapBarcodeMaxRetries: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapBarcodeMaxSearchPriorities: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapBarcodeSearchMode: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapBarcodeSearchPriorities: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapBarcodeTimeout: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapBitDepth: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapBitDepthReduction: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapBitOrder: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapBitOrderCodes: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapBrightness: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapCCITTKFactor: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapColorManagementEnabled: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapCompression: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapContrast: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapCustHalftone: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapExposureTime: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapExtImageInfo: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapFeederType: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapFilmType: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapFilter: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapFlashUsed: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapFlashUsed2: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapFlipRotation: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapFrames: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapGamma: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapHalftones: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapHighlight: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapICCProfile: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapImageDataSet: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapImageFileFormat: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapImageFilter: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapImageMerge: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapImageMergeHeightThreshold: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapJpegPixelType: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapJpegQuality: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapJpegSubsampling: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapLampState: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapLightPath: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapLightSource: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapMaxFrames: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapMinimumHeight: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapMinimumWidth: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapMirror: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapNoiseFilter: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapOrientation: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapOverScan: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapPatchCodeDetectionEnabled: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapPatchCodeMaxRetries: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapPatchCodeMaxSearchPriorities: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapPatchCodeSearchMode: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapPatchCodeSearchPriorities: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapPatchCodeTimeout: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; // TODO phys size are twfix32 case CapabilityId.ICapPhysicalHeight: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapPhysicalWidth: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapPixelFlavor: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapPixelFlavorCodes: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapPixelType: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapPlanarChunky: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapRotation: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapShadow: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapSupportedBarcodeTypes: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapSupportedExtImageInfo: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapSupportedPatchCodeTypes: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapSupportedSizes: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapThreshold: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapTiles: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapTimeFill: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapUndefinedImageSize: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapUnits: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapXferMech: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum(); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum(); break; case CapabilityId.ICapXNativeResolution: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapXResolution: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapXScaling: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapYNativeResolution: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapYResolution: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapYScaling: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; case CapabilityId.ICapZoomFactor: - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); break; default: if (cap > CapabilityId.CustomBase) { - CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap); + CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap); } else { diff --git a/Tests/Tester.WPF/ViewModels/TwainVM.cs b/Tests/Tester.WPF/ViewModels/TwainVM.cs index 1e29bcc..8ae3976 100644 --- a/Tests/Tester.WPF/ViewModels/TwainVM.cs +++ b/Tests/Tester.WPF/ViewModels/TwainVM.cs @@ -3,6 +3,7 @@ using GalaSoft.MvvmLight.Messaging; using NTwain; using NTwain.Data; using System; +using System.Linq; using System.IO; using System.Reflection; using System.Threading; @@ -71,7 +72,7 @@ namespace Tester.WPF if (this.CurrentSource.CapGetCurrent(CapabilityId.ICapXferMech).ConvertToEnum() == XferMech.File) { - var formats = this.CurrentSource.CapGetImageFileFormat(); + var formats = this.CurrentSource.CapImageFileFormat.Get(); var wantFormat = formats.Contains(FileFormat.Tiff) ? FileFormat.Tiff : FileFormat.Bmp; var fileSetup = new TWSetupFileXfer @@ -122,14 +123,14 @@ namespace Tester.WPF { if (State == 4) { - if (this.CurrentSource.CapGetPixelTypes().Contains(PixelType.BlackWhite)) + if (this.CurrentSource.CapImagePixelType.Get().Contains(PixelType.BlackWhite)) { - this.CurrentSource.CapSetPixelType(PixelType.BlackWhite); + this.CurrentSource.CapImagePixelType.Set(PixelType.BlackWhite); } - if (this.CurrentSource.CapGetImageXferMechs().Contains(XferMech.File)) + if (this.CurrentSource.CapImageXferMech.Get().Contains(XferMech.File)) { - this.CurrentSource.CapSetImageXferMech(XferMech.File); + this.CurrentSource.CapImageXferMech.Set(XferMech.File); } var rc = this.CurrentSource.Enable(SourceEnableMode.NoUI, false, hwnd); diff --git a/Tests/Tester.Winform/TestForm.cs b/Tests/Tester.Winform/TestForm.cs index 61fc519..eadc748 100644 --- a/Tests/Tester.Winform/TestForm.cs +++ b/Tests/Tester.Winform/TestForm.cs @@ -273,11 +273,12 @@ namespace Tester.Winform private void LoadSourceCaps() { - var caps = _twain.CurrentSource.SupportedCaps; + var src = _twain.CurrentSource; + var caps = src.SupportedCaps; _loadingCaps = true; - if (groupDepth.Enabled = caps.Contains(CapabilityId.ICapPixelType)) + if (groupDepth.Enabled = src.CapImagePixelType.IsSupported) { - LoadDepth(); + LoadDepth(src.CapImagePixelType); } if (groupDPI.Enabled = caps.Contains(CapabilityId.ICapXResolution) && caps.Contains(CapabilityId.ICapYResolution)) { @@ -288,23 +289,28 @@ namespace Tester.Winform { LoadDuplex(); } - if (groupSize.Enabled = caps.Contains(CapabilityId.ICapSupportedSizes)) + if (groupSize.Enabled = src.CapImageSupportedSize.IsSupported) { - LoadPaperSize(); + LoadPaperSize(src.CapImageSupportedSize); } btnAllSettings.Enabled = caps.Contains(CapabilityId.CapEnableDSUIOnly); _loadingCaps = false; } - private void LoadPaperSize() + private void LoadPaperSize(CapabilityControl cap) { - var list = _twain.CurrentSource.CapGetSupportedSizes(); + var list = cap.Get(); comboSize.DataSource = list; - var cur = _twain.CurrentSource.CapGetCurrent(CapabilityId.ICapSupportedSizes).ConvertToEnum(); + var cur = cap.GetCurrent(); if (list.Contains(cur)) { comboSize.SelectedItem = cur; } + var labelTest = cap.GetLabel(); + if (!string.IsNullOrEmpty(labelTest)) + { + groupSize.Text = labelTest; + } } private void LoadDuplex() @@ -324,15 +330,20 @@ namespace Tester.Winform } } - private void LoadDepth() + private void LoadDepth(CapabilityControl cap) { - var list = _twain.CurrentSource.CapGetPixelTypes(); + var list = cap.Get(); comboDepth.DataSource = list; - var cur = _twain.CurrentSource.CapGetCurrent(CapabilityId.ICapPixelType).ConvertToEnum(); + var cur = cap.GetCurrent(); if (list.Contains(cur)) { comboDepth.SelectedItem = cur; } + var labelTest = cap.GetLabel(); + if (!string.IsNullOrEmpty(labelTest)) + { + groupDepth.Text = labelTest; + } } private void comboSize_SelectedIndexChanged(object sender, EventArgs e) @@ -340,7 +351,7 @@ namespace Tester.Winform if (!_loadingCaps && _twain.State == 4) { var sel = (SupportedSize)comboSize.SelectedItem; - _twain.CurrentSource.CapSetSupportedSize(sel); + _twain.CurrentSource.CapImageSupportedSize.Set(sel); } } @@ -349,7 +360,7 @@ namespace Tester.Winform if (!_loadingCaps && _twain.State == 4) { var sel = (PixelType)comboDepth.SelectedItem; - _twain.CurrentSource.CapSetPixelType(sel); + _twain.CurrentSource.CapImagePixelType.Set(sel); } }