CapabilityControl idea progress.

This commit is contained in:
soukoku
2014-09-17 07:33:52 -04:00
parent d72c0586e6
commit 782f96827e
11 changed files with 740 additions and 330 deletions

View File

@@ -45,9 +45,15 @@
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\NTwain\CapabilityControl.cs">
<Link>CapabilityControl.cs</Link>
</Compile>
<Compile Include="..\NTwain\CapabilityReader.cs">
<Link>CapabilityReader.cs</Link>
</Compile>
<Compile Include="..\NTwain\CapRoutines.cs">
<Link>CapRoutines.cs</Link>
</Compile>
<Compile Include="..\NTwain\DataSource.Caps.cs">
<Link>DataSource.Caps.cs</Link>
</Compile>

74
NTwain/CapRoutines.cs Normal file
View File

@@ -0,0 +1,74 @@
using NTwain.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NTwain
{
/// <summary>
/// Contains re-usable routines for cap use.
/// </summary>
public static class CapRoutines
{
#region handy conversions
/// <summary>
/// Routine that does nothing.
/// </summary>
/// <param name="value">The value.</param>
/// <returns></returns>
public static object NoConvertRoutine(object value)
{
return value;
}
/// <summary>
/// Predefined routine for <see cref="BoolType"/>
/// </summary>
/// <param name="value">The value.</param>
/// <returns></returns>
public static TEnum EnumRoutine<TEnum>(object value) where TEnum : struct, IConvertible
{
if (value != null)
{
return value.ConvertToEnum<TEnum>();
}
return default(TEnum);
}
/// <summary>
/// Predefined routine for <see cref="TWFix32"/>
/// </summary>
/// <param name="value">The value.</param>
/// <returns></returns>
public static TWFix32 TWFix32Routine(object value)
{
if (value != null)
{
if (value is TWFix32)
{
return (TWFix32)value;
}
return Convert.ToSingle(value);
}
return default(TWFix32);
}
/// <summary>
/// Predefined routine for <see cref="string"/>
/// </summary>
/// <param name="value">The value.</param>
/// <returns></returns>
public static string StringRoutine(object value)
{
if (value != null)
{
return value.ToString();
}
return default(string);
}
#endregion
}
}

245
NTwain/CapabilityControl.cs Normal file
View File

@@ -0,0 +1,245 @@
using NTwain.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NTwain
{
/// <summary>
/// Wrapped class for reading/writing a TWAIN capability associated with a <see cref="DataSource"/>.
/// </summary>
/// <typeparam name="TValue">The TWAIN type of the value.</typeparam>
public class CapabilityControl<TValue>
{
DataSource _source;
Func<object, TValue> _converter;
Func<TValue, TWCapability> _setProvider;
/// <summary>
/// Initializes a new instance of the <see cref="CapabilityControl"/> class.
/// </summary>
/// <param name="source">The source.</param>
/// <param name="capability">The capability.</param>
/// <param name="valueConversionRoutine">The value conversion routine.</param>
/// <param name="setCapProvider">Callback to provide the capability object for set method.</param>
/// <exception cref="System.ArgumentNullException">source</exception>
public CapabilityControl(DataSource source, CapabilityId capability, Func<object, TValue> valueConversionRoutine, Func<TValue, TWCapability> 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
/// <summary>
/// Gets the capability.
/// </summary>
/// <value>
/// The capability.
/// </value>
public CapabilityId Capability { get; private set; }
/// <summary>
/// Gets the supported actions.
/// </summary>
/// <value>
/// The supported actions.
/// </value>
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
/// <summary>
/// Gets the default value of this capability.
/// </summary>
/// <returns></returns>
public TValue GetDefault()
{
if (CanGetDefault)
{
return _converter(_source.CapGetDefault(Capability));
}
return default(TValue);
}
/// <summary>
/// Gets the current value of this capability.
/// </summary>
/// <returns></returns>
public TValue GetCurrent()
{
if (CanGetCurrent)
{
return _converter(_source.CapGetCurrent(Capability));
}
return default(TValue);
}
/// <summary>
/// Gets all the possible values of this capability.
/// </summary>
/// <returns></returns>
public IList<TValue> Get()
{
if (CanGet)
{
return _source.CapGet(Capability).Select(o => _converter(o)).ToList();
}
return new List<TValue>();
}
/// <summary>
/// [Experimental] Gets the label value of this capability.
/// </summary>
/// <returns></returns>
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();
}
/// <summary>
/// [Experimental] Gets the help value of this capability.
/// </summary>
/// <returns></returns>
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();
}
/// <summary>
/// [Experimental] Gets the display names for possible values of this capability.
/// </summary>
/// <returns></returns>
public IList<string> GetLabelEnum()
{
var list = new List<object>();
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
/// <summary>
/// Resets all values and constraint to power-on defaults.
/// </summary>
/// <returns></returns>
public ReturnCode ResetAll()
{
return _source.ResetAll(Capability);
}
/// <summary>
/// Resets the current value to power-on default.
/// </summary>
/// <returns></returns>
public ReturnCode Reset()
{
return _source.Reset(Capability);
}
/// <summary>
/// Sets the current value of this capability.
/// </summary>
/// <param name="value">The value.</param>
/// <returns></returns>
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
}
}
}

View File

@@ -8,7 +8,7 @@ using System.Runtime.InteropServices;
namespace NTwain
{
/// <summary>
/// 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.
/// </summary>
public class CapabilityReader

View File

@@ -1345,6 +1345,7 @@ namespace NTwain.Data
/// This structure is used to pass specific information between the data source and the application
/// through <see cref="TWExtImageInfo"/>.
/// </summary>
[DebuggerDisplay("Type = {ItemType}")]
public partial struct TWInfo
{
/// <summary>

View File

@@ -11,6 +11,8 @@ namespace NTwain
partial class DataSource
{
#region low-level cap stuff
/// <summary>
/// Gets the actual supported operations for a capability.
/// </summary>
@@ -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;
}
/// <summary>
/// Gets the default value for a capability.
/// </summary>
/// <param name="capId">The cap id.</param>
/// <returns></returns>
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;
}
/// <summary>
/// A general method that tries to get capability values from current <see cref="DataSource" />.
/// </summary>
/// <param name="capabilityId">The capability unique identifier.</param>
/// <returns></returns>
public IList<object> CapGetValues(CapabilityId capabilityId)
public IList<object> CapGet(CapabilityId capabilityId)
{
var list = new List<object>();
using (TWCapability cap = new TWCapability(capabilityId))
@@ -94,155 +134,217 @@ namespace NTwain
return list;
}
#region xfer mech
/// <summary>
/// Gets the supported image <see cref="XferMech"/> for the current source.
/// Only call this at state 4 or higher.
/// Resets all values and constraint to power-on defaults.
/// </summary>
/// <param name="capabilityId">The capability identifier.</param>
/// <returns></returns>
public IList<XferMech> CapGetImageXferMech()
public ReturnCode ResetAll(CapabilityId capabilityId)
{
return CapGetValues(CapabilityId.ICapXferMech).CastToEnum<XferMech>(true);
}
#endregion
#region compression
/// <summary>
/// Gets the supported <see cref="CompressionType"/> for the current source.
/// Only call this at state 4 or higher.
/// </summary>
/// <returns></returns>
public IList<CompressionType> CapGetCompression()
{
return CapGetValues(CapabilityId.ICapCompression).CastToEnum<CompressionType>(true);
}
/// <summary>
/// Change the image compression for the current source.
/// </summary>
/// <param name="compression">The compression.</param>
/// <returns></returns>
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;
}
}
/// <summary>
/// Resets the current value to power-on default.
/// </summary>
/// <param name="capabilityId">The capability identifier.</param>
/// <returns></returns>
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<XferMech> _imgXferMech;
/// <summary>
/// Gets the supported <see cref="FileFormat"/> for the current source.
/// Only call this at state 4 or higher.
/// Gets the property to work with image <see cref="XferMech"/> for the current source.
/// </summary>
/// <returns></returns>
public IList<FileFormat> CapGetImageFileFormat()
/// <value>
/// The image xfer mech.
/// </value>
public CapabilityControl<XferMech> CapImageXferMech
{
return CapGetValues(CapabilityId.ICapImageFileFormat).CastToEnum<FileFormat>(true);
}
/// <summary>
/// Change the image format for the current source.
/// </summary>
/// <param name="format">The format.</param>
/// <returns></returns>
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<XferMech>(this, CapabilityId.ICapXferMech, CapRoutines.EnumRoutine<XferMech>,
value => new TWCapability(CapabilityId.ICapXferMech, new TWOneValue
{
Item = (uint)value,
ItemType = ItemType.UInt16
}));
}
return _imgXferMech;
}
}
#endregion
#region pixel type
private CapabilityControl<XferMech> _audXferMech;
/// <summary>
/// Gets the supported <see cref="PixelType"/> for the current source.
/// Only call this at state 4 or higher.
/// Gets the property to work with audio <see cref="XferMech"/> for the current source.
/// </summary>
/// <returns></returns>
public IList<PixelType> CapGetPixelTypes()
/// <value>
/// The audio xfer mech.
/// </value>
public CapabilityControl<XferMech> CapAudioXferMech
{
return CapGetValues(CapabilityId.ICapPixelType).CastToEnum<PixelType>(true);
}
/// <summary>
/// Change the pixel type for the current source.
/// </summary>
/// <param name="type">The type.</param>
/// <returns></returns>
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<XferMech>(this, CapabilityId.ACapXferMech, CapRoutines.EnumRoutine<XferMech>,
value => new TWCapability(CapabilityId.ACapXferMech, new TWOneValue
{
Item = (uint)value,
ItemType = ItemType.UInt16
}));
}
return _audXferMech;
}
}
#endregion
#region xfer mech
private CapabilityControl<CompressionType> _compression;
/// <summary>
/// Gets the supported image <see cref="XferMech"/> for the current source.
/// Only call this at state 4 or higher.
/// Gets the property to work with image <see cref="CompressionType"/> for the current source.
/// </summary>
/// <returns></returns>
public IList<XferMech> CapGetImageXferMechs()
/// <value>
/// The image compression.
/// </value>
public CapabilityControl<CompressionType> CapImageCompression
{
return CapGetValues(CapabilityId.ICapXferMech).CastToEnum<XferMech>(true);
}
/// <summary>
/// Gets the supported audio <see cref="XferMech"/> for the current source.
/// Only call this at state 4 or higher.
/// </summary>
/// <returns></returns>
public IList<XferMech> CapGetAudioXferMechs()
{
return CapGetValues(CapabilityId.ACapXferMech).CastToEnum<XferMech>(true);
}
/// <summary>
/// Change the image xfer type for the current source.
/// </summary>
/// <param name="type">The type.</param>
/// <returns></returns>
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<CompressionType>(this, CapabilityId.ICapCompression, CapRoutines.EnumRoutine<CompressionType>,
value => new TWCapability(CapabilityId.ICapCompression, new TWOneValue
{
Item = (uint)value,
ItemType = ItemType.UInt16
}));
}
return _compression;
}
}
private CapabilityControl<FileFormat> _fileFormat;
/// <summary>
/// Change the audio xfer type for the current source.
/// Gets the property to work with image <see cref="FileFormat"/> for the current source.
/// </summary>
/// <param name="type">The type.</param>
/// <returns></returns>
public ReturnCode CapSetAudioXferMech(XferMech type)
/// <value>
/// The image file format.
/// </value>
public CapabilityControl<FileFormat> 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<FileFormat>(this, CapabilityId.ICapImageFileFormat, CapRoutines.EnumRoutine<FileFormat>,
value => new TWCapability(CapabilityId.ICapImageFileFormat, new TWOneValue
{
Item = (uint)value,
ItemType = ItemType.UInt16
}));
}
return _fileFormat;
}
}
private CapabilityControl<PixelType> _pixelType;
/// <summary>
/// Gets the property to work with image <see cref="PixelType"/> for the current source.
/// </summary>
/// <value>
/// The image pixel type.
/// </value>
public CapabilityControl<PixelType> CapImagePixelType
{
get
{
if (_pixelType == null)
{
_pixelType = new CapabilityControl<PixelType>(this, CapabilityId.ICapPixelType, CapRoutines.EnumRoutine<PixelType>,
value => new TWCapability(CapabilityId.ICapPixelType, new TWOneValue
{
Item = (uint)value,
ItemType = ItemType.UInt16
}));
}
return _pixelType;
}
}
private CapabilityControl<SupportedSize> _supportSize;
/// <summary>
/// Gets the property to work with image <see cref="SupportedSize"/> for the current source.
/// </summary>
/// <value>
/// The image supported size.
/// </value>
public CapabilityControl<SupportedSize> CapImageSupportedSize
{
get
{
if (_supportSize == null)
{
_supportSize = new CapabilityControl<SupportedSize>(this, CapabilityId.ICapSupportedSizes, CapRoutines.EnumRoutine<SupportedSize>,
value => new TWCapability(CapabilityId.ICapSupportedSizes, new TWOneValue
{
Item = (uint)value,
ItemType = ItemType.UInt16
}));
}
return _supportSize;
}
}
private CapabilityControl<BoolType> _autoDeskew;
/// <summary>
/// Gets the property to work with image auto deskew flag for the current source.
/// </summary>
/// <value>
/// The image supported size.
/// </value>
public CapabilityControl<BoolType> CapImageAutoDeskew
{
get
{
if (_autoDeskew == null)
{
_autoDeskew = new CapabilityControl<BoolType>(this, CapabilityId.ICapAutomaticDeskew, CapRoutines.EnumRoutine<BoolType>, null);
}
return _autoDeskew;
}
}
@@ -257,7 +359,7 @@ namespace NTwain
/// <returns></returns>
public IList<TWFix32> 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
/// <summary>
/// Gets the supported <see cref="SupportedSize"/> for the current source.
/// Only call this at state 4 or higher.
/// </summary>
/// <returns></returns>
public IList<SupportedSize> CapGetSupportedSizes()
{
return CapGetValues(CapabilityId.ICapSupportedSizes).CastToEnum<SupportedSize>(true);
}
/// <summary>
/// Change the supported paper size for the current source.
/// </summary>
/// <param name="size">The size.</param>
/// <returns></returns>
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
/// <summary>

View File

@@ -185,7 +185,7 @@ namespace NTwain
{
if (_supportedCaps == null && _session.State > 3)
{
_supportedCaps = CapGetValues(CapabilityId.CapSupportedCaps).CastToEnum<CapabilityId>(false);
_supportedCaps = CapGet(CapabilityId.CapSupportedCaps).CastToEnum<CapabilityId>(false);
}
return _supportedCaps ?? _emptyCapList;
}

View File

@@ -55,7 +55,9 @@
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="CapabilityControl.cs" />
<Compile Include="CapabilityReader.cs" />
<Compile Include="CapRoutines.cs" />
<Compile Include="Data\TypeReader.cs" />
<Compile Include="Data\TwainTypesExtended.cs" />
<Compile Include="DeviceEventArgs.cs" />

View File

@@ -133,505 +133,505 @@ namespace Tester.WPF
switch (cap)
{
case CapabilityId.ACapXferMech:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<XferMech>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<XferMech>();
break;
case CapabilityId.CapAlarms:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<AlarmType>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<AlarmType>();
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<CameraSide>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<CameraSide>();
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<ClearBuffer>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<ClearBuffer>();
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<DeviceEvent>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<DeviceEvent>();
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<DoubleFeedDetection>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<DoubleFeedDetection>();
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<DoubleFeedDetectionResponse>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<DoubleFeedDetectionResponse>();
break;
case CapabilityId.CapDoubleFeedDetectionSensitivity:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<DoubleFeedDetectionSensitivity>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<DoubleFeedDetectionSensitivity>();
break;
case CapabilityId.CapDuplex:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<Duplex>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<Duplex>();
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<FeederAlignment>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<FeederAlignment>();
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<FeederOrder>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<FeederOrder>();
break;
case CapabilityId.CapFeederPocket:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<FeederPocket>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<FeederPocket>();
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<IndicatorsMode>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<IndicatorsMode>();
break;
case CapabilityId.CapJobControl:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<JobControl>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<JobControl>();
break;
case CapabilityId.CapLanguage:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<Language>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<Language>();
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<PaperHandling>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<PaperHandling>();
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<PowerSupply>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<PowerSupply>();
break;
case CapabilityId.CapPrinter:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<Printer>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<Printer>();
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<PrinterFontStyle>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<PrinterFontStyle>();
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<PrinterIndexTrigger>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<PrinterIndexTrigger>();
break;
case CapabilityId.CapPrinterMode:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<PrinterMode>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<PrinterMode>();
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<Segmented>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<Segmented>();
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<CapabilityId>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<CapabilityId>();
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<PixelType>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<PixelType>();
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<BitDepthReduction>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<BitDepthReduction>();
break;
case CapabilityId.ICapBitOrder:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<BitOrder>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<BitOrder>();
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<CompressionType>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<CompressionType>();
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<FeederType>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<FeederType>();
break;
case CapabilityId.ICapFilmType:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<FilmType>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<FilmType>();
break;
case CapabilityId.ICapFilter:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<FilterType>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<FilterType>();
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<FlipRotation>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<FlipRotation>();
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<IccProfile>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<IccProfile>();
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<FileFormat>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<FileFormat>();
break;
case CapabilityId.ICapImageFilter:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<ImageFilter>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<ImageFilter>();
break;
case CapabilityId.ICapImageMerge:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<ImageMerge>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<ImageMerge>();
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<PixelType>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<PixelType>();
break;
case CapabilityId.ICapJpegQuality:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<JpegQuality>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<JpegQuality>();
break;
case CapabilityId.ICapJpegSubsampling:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<JpegSubsampling>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<JpegSubsampling>();
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<LightPath>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<LightPath>();
break;
case CapabilityId.ICapLightSource:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<LightSource>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<LightSource>();
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<Mirror>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<Mirror>();
break;
case CapabilityId.ICapNoiseFilter:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<NoiseFilter>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<NoiseFilter>();
break;
case CapabilityId.ICapOrientation:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<OrientationType>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<OrientationType>();
break;
case CapabilityId.ICapOverScan:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<OverScan>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<OverScan>();
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<PatchCode>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<PatchCode>();
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<PixelFlavor>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<PixelFlavor>();
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<PixelType>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<PixelType>();
break;
case CapabilityId.ICapPlanarChunky:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<PlanarChunky>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<PlanarChunky>();
break;
case CapabilityId.ICapRotation:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<Rotation>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<Rotation>();
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<BarcodeType>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<BarcodeType>();
break;
case CapabilityId.ICapSupportedExtImageInfo:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<ExtendedImageInfo>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<ExtendedImageInfo>();
break;
case CapabilityId.ICapSupportedPatchCodeTypes:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<PatchCode>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<PatchCode>();
break;
case CapabilityId.ICapSupportedSizes:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<SupportedSize>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<SupportedSize>();
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<Unit>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<Unit>();
break;
case CapabilityId.ICapXferMech:
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGetValues(cap).CastToEnum<XferMech>();
CapDetailList.ItemsSource = _twainVM.CurrentSource.CapGet(cap).CastToEnum<XferMech>();
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
{

View File

@@ -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>() == 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);

View File

@@ -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<SupportedSize> cap)
{
var list = _twain.CurrentSource.CapGetSupportedSizes();
var list = cap.Get();
comboSize.DataSource = list;
var cur = _twain.CurrentSource.CapGetCurrent(CapabilityId.ICapSupportedSizes).ConvertToEnum<SupportedSize>();
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<PixelType> cap)
{
var list = _twain.CurrentSource.CapGetPixelTypes();
var list = cap.Get();
comboDepth.DataSource = list;
var cur = _twain.CurrentSource.CapGetCurrent(CapabilityId.ICapPixelType).ConvertToEnum<PixelType>();
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);
}
}