Added custom cap value container types.

This commit is contained in:
Eugene Wang
2018-11-21 16:14:33 -05:00
parent eb7e0ad403
commit ffeef44ac7
4 changed files with 140 additions and 147 deletions

View File

@@ -0,0 +1,122 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NTwain.Data
{
// use custom containers for twain container types to not have to worry about memory mgmt
// after giving it to consumers
/// <summary>
/// Container for one value.
/// </summary>
/// <typeparam name="T"></typeparam>
public struct OneValue<T>
{
/// <summary>
/// The type of the item.
/// </summary>
public ItemType Type;
/// <summary>
/// The value.
/// </summary>
public T Value;
}
/// <summary>
/// Stores a group of associated individual values for a capability.
/// The values need have no relationship to one another aside from
/// being used to describe the same "value" of the capability
/// </summary>
public struct ArrayValue<T>
{
/// <summary>
/// The type of items in the array.
/// </summary>
public ItemType Type;
/// <summary>
/// Array of values.
/// </summary>
public T[] ItemList;
}
/// <summary>
/// An enumeration stores a list of individual values, with one of the items designated as the current
/// value. There is no required order to the values in the list.
/// </summary>
public struct EnumValue<T>
{
/// <summary>
/// Gets the byte offset of the item list from a Ptr to the first item.
/// </summary>
internal const int ValuesOffset = 14;
/// <summary>
/// The type of items in the enumerated list.
/// </summary>
public ItemType Type;
/// <summary>
/// The item number, or index (zero-based) into
/// <see cref="ItemList"/>, of the "current"
/// value for the capability.
/// </summary>
public int CurrentIndex;
/// <summary>
/// The item number, or index (zero-based) into
/// <see cref="ItemList"/>, of the "power-on"
/// value for the capability.
/// </summary>
public int DefaultIndex;
/// <summary>
/// The enumerated value list.
/// </summary>
public T[] ItemList;
}
/// <summary>
/// Container for a range of values.
/// </summary>
public struct RangeValue
{
/// <summary>
/// The type of items in the container.
/// </summary>
public ItemType Type;
/// <summary>
/// The least positive/most negative value of the range.
/// </summary>
public int Min;
/// <summary>
/// The most positive/least negative value of the range.
/// </summary>
public int Max;
/// <summary>
/// The delta between two adjacent values of the range.
/// e.g. Item2 - Item1 = StepSize;
/// </summary>
public int StepSize;
/// <summary>
/// The devices "power-on" value for the capability. If the application is
/// performing a MSG_SET operation and isnt sure what the default
/// value is, set this field to <see cref="TwainConst.DontCare32"/>.
/// </summary>
public int DefaultValue;
/// <summary>
/// The value to which the device (or its user interface) is currently set to
/// for the capability.
/// </summary>
public int CurrentValue;
}
}

View File

@@ -74,9 +74,9 @@ namespace NTwain.Data
partial class TW_ARRAY
{
// TODO: _itemType in mac is TW_UINT32?
TW_UINT16 _itemType;
TW_UINT32 _numItems;
object[] _itemList;
public TW_UINT16 ItemType;
public TW_UINT32 NumItems;
public IntPtr ItemList;
}
[StructLayout(LayoutKind.Sequential, Pack = 2),
@@ -181,12 +181,12 @@ namespace NTwain.Data
partial class TW_ENUMERATION
{
// TODO: _itemType in mac is TW_UINT32?
TW_UINT16 _itemType;
public TW_UINT16 ItemType;
// TODO: these are UInt64 in linux 64 bit?
TW_UINT32 _numItems;
TW_UINT32 _currentIndex;
TW_UINT32 _defaultIndex;
object[] _itemList;
public TW_UINT32 NumItems;
public TW_UINT32 CurrentIndex;
public TW_UINT32 DefaultIndex;
public IntPtr ItemList;
}
[StructLayout(LayoutKind.Sequential, Pack = 2)]
@@ -431,8 +431,8 @@ namespace NTwain.Data
partial class TW_ONEVALUE
{
// TODO: mac is different?
TW_UINT16 _itemType;
TW_UINT32 _item;
public TW_UINT16 ItemType;
public TW_UINT32 Item;
}
[StructLayout(LayoutKind.Sequential, Pack = 2)]
@@ -468,12 +468,12 @@ namespace NTwain.Data
partial class TW_RANGE
{
// TODO: mac & linux are different?
TW_UINT16 _itemType;
TW_UINT32 _minValue;
TW_UINT32 _maxValue;
TW_UINT32 _stepSize;
TW_UINT32 _defaultValue;
TW_UINT32 _currentValue;
public TW_UINT16 ItemType;
public TW_UINT32 MinValue;
public TW_UINT32 MaxValue;
public TW_UINT32 StepSize;
public TW_UINT32 DefaultValue;
public TW_UINT32 CurrentValue;
}
//[StructLayout(LayoutKind.Sequential, Pack = 2)]

View File

@@ -526,39 +526,6 @@ namespace NTwain.Data
}
}
// /// <summary>
// /// Stores a group of associated individual values for a capability.
// /// The values need have no relationship to one another aside from
// /// being used to describe the same "value" of the capability
// /// </summary>
// public partial class TW_ARRAY
// {
// /// <summary>
// /// The type of items in the array. All items in the array have the same size.
// /// </summary>
// public ItemType ItemType { get { return (ItemType)_itemType; } set { _itemType = (ushort)value; } }
// ///// <summary>
// ///// How many items are in the array.
// ///// </summary>
// //public int Count { get { return (int)_numItems; } set { _numItems = (uint)value; } }
// /// <summary>
// /// Array of ItemType values starts here.
// /// </summary>
// public object[] ItemList
// {
// get { return _itemList; }
// set
// {
// _itemList = value;
// if (value != null) { _numItems = (uint)value.Length; }
// else { _numItems = 0; }
// }
// }
// }
/// <summary>
/// Used to get audio info.
/// </summary>
@@ -1120,52 +1087,6 @@ namespace NTwain.Data
#endregion
}
// /// <summary>
// /// An enumeration stores a list of individual values, with one of the items designated as the current
// /// value. There is no required order to the values in the list.
// /// </summary>
// public partial class TW_ENUMERATION
// {
// /// <summary>
// /// The type of items in the enumerated list. All items in the array have the same size.
// /// </summary>
// public ItemType ItemType { get { return (ItemType)_itemType; } set { _itemType = (ushort)value; } }
// ///// <summary>
// ///// How many items are in the enumeration.
// ///// </summary>
// //public int Count { get { return (int)_numItems; } set { _numItems = (uint)value; } }
// /// <summary>
// /// The item number, or index (zero-based) into <see cref="ItemList"/>, of the "current"
// /// value for the capability.
// /// </summary>
// public int CurrentIndex { get { return (int)_currentIndex; } set { _currentIndex = (uint)value; } }
// /// <summary>
// /// The item number, or index (zero-based) into <see cref="ItemList"/>, of the "power-on"
// /// value for the capability.
// /// </summary>
// public int DefaultIndex { get { return (int)_defaultIndex; } set { _defaultIndex = (uint)value; } }
// /// <summary>
// /// The enumerated list: one value resides within each array element.
// /// </summary>
// public object[] ItemList
// {
// get { return _itemList; }
// set
// {
// _itemList = value;
// if (value != null) { _numItems = (uint)value.Length; }
// else { _numItems = 0; }
// }
// }
// /// <summary>
// /// Gets the byte offset of the item list from a Ptr to the first item.
// /// </summary>
// internal const int ItemOffset = 14;
// }
// /// <summary>
// /// This structure is used to pass specific information between the data source and the application
// /// through <see cref="TW_EXTIMAGEINFO"/>.
@@ -1954,21 +1875,6 @@ namespace NTwain.Data
public uint SheetCount => _sheetCount;
}
// /// <summary>
// /// Container for one value.
// /// </summary>
// public partial class TW_ONEVALUE
// {
// /// <summary>
// /// The type of the item.
// /// </summary>
// public ItemType ItemType { get { return (ItemType)_itemType; } set { _itemType = (ushort)value; } }
// /// <summary>
// /// The value.
// /// </summary>
// public uint Item { get { return _item; } set { _item = value; } }
// }
/// <summary>
/// This structure holds the color palette information for buffered memory transfers of type
@@ -2051,42 +1957,7 @@ namespace NTwain.Data
/// </summary>
public EndXferJob EndOfJob { get { return (EndXferJob)_eOJ; } }
}
// /// <summary>
// /// Container for a range of values.
// /// </summary>
// public partial class TW_RANGE
// {
// /// <summary>
// /// The type of items in the list.
// /// </summary>
// public ItemType ItemType { get { return (ItemType)_itemType; } set { _itemType = (ushort)value; } }
// /// <summary>
// /// The least positive/most negative value of the range.
// /// </summary>
// public uint MinValue { get { return _minValue; } set { _minValue = value; } }
// /// <summary>
// /// The most positive/least negative value of the range.
// /// </summary>
// public uint MaxValue { get { return _maxValue; } set { _maxValue = value; } }
// /// <summary>
// /// The delta between two adjacent values of the range.
// /// e.g. Item2 - Item1 = StepSize;
// /// </summary>
// public uint StepSize { get { return _stepSize; } set { _stepSize = value; } }
// /// <summary>
// /// The devices "power-on" value for the capability. If the application is
// /// performing a MSG_SET operation and isnt sure what the default
// /// value is, set this field to <see cref="TwainConst.DontCare32"/>.
// /// </summary>
// public uint DefaultValue { get { return _defaultValue; } set { _defaultValue = value; } }
// /// <summary>
// /// The value to which the device (or its user interface) is currently set to
// /// for the capability.
// /// </summary>
// public uint CurrentValue { get { return _currentValue; } set { _currentValue = value; } }
// }
// ///// <summary>
// ///// This structure is used by the application to specify a set of mapping values to be applied to RGB

View File

@@ -297,7 +297,7 @@ namespace NTwain
/// </returns>
public override string ToString()
{
return State.ToString()
return State.ToString();
}
}
}