2014-04-03 07:13:15 +08:00
|
|
|
|
using NTwain.Data;
|
2014-04-03 07:01:21 +08:00
|
|
|
|
using NTwain.Values;
|
|
|
|
|
using System;
|
|
|
|
|
|
|
|
|
|
namespace NTwain.Triplets
|
|
|
|
|
{
|
2014-04-05 10:19:16 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Represents <see cref="DataArgumentType.UserInterface"/>.
|
|
|
|
|
/// </summary>
|
2014-04-03 07:01:21 +08:00
|
|
|
|
sealed class UserInterface : OpBase
|
|
|
|
|
{
|
2014-04-06 04:48:28 +08:00
|
|
|
|
internal UserInterface(ITwainStateInternal session) : base(session) { }
|
2014-04-03 07:01:21 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// This operation causes the Source’s user interface, if displayed during the
|
|
|
|
|
/// EnableDS operation, to be lowered. The Source is returned to
|
|
|
|
|
/// State 4, where capability negotiation can again occur. The application can invoke this operation
|
|
|
|
|
/// either because it wants to shut down the current session, or in response to the Source "posting"
|
|
|
|
|
/// a CloseDSReq event to it. Rarely, the application may need to close the Source because an
|
|
|
|
|
/// error condition was detected.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="userInterface">The user interface.</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public ReturnCode DisableDS(TWUserInterface userInterface)
|
|
|
|
|
{
|
|
|
|
|
Session.VerifyState(5, 5, DataGroups.Control, DataArgumentType.UserInterface, Message.DisableDS);
|
2014-04-06 06:33:21 +08:00
|
|
|
|
var rc = PInvoke.DsmEntry(Session.GetAppId(), Session.SourceId, Message.DisableDS, userInterface);
|
2014-04-03 07:01:21 +08:00
|
|
|
|
if (rc == ReturnCode.Success)
|
|
|
|
|
{
|
2014-04-04 19:25:11 +08:00
|
|
|
|
Session.ChangeState(4, true);
|
2014-04-03 07:01:21 +08:00
|
|
|
|
}
|
|
|
|
|
return rc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Enables the DS.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="userInterface">The user interface.</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public ReturnCode EnableDS(TWUserInterface userInterface)
|
|
|
|
|
{
|
|
|
|
|
Session.VerifyState(4, 4, DataGroups.Control, DataArgumentType.UserInterface, Message.EnableDS);
|
|
|
|
|
using (var pending = Session.GetPendingStateChanger(5))
|
|
|
|
|
{
|
2014-04-06 06:33:21 +08:00
|
|
|
|
var rc = PInvoke.DsmEntry(Session.GetAppId(), Session.SourceId, Message.EnableDS, userInterface);
|
2014-04-03 07:01:21 +08:00
|
|
|
|
if (rc == ReturnCode.Success ||
|
|
|
|
|
(!userInterface.ShowUI && rc == ReturnCode.CheckStatus))
|
|
|
|
|
{
|
|
|
|
|
pending.Commit();
|
|
|
|
|
}
|
|
|
|
|
return rc;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// This operation is used by applications
|
|
|
|
|
/// that wish to display the source user interface to allow the user to manipulate the sources current
|
|
|
|
|
/// settings for DPI, paper size, etc. but not acquire an image.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="userInterface">The user interface.</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public ReturnCode EnableDSUIOnly(TWUserInterface userInterface)
|
|
|
|
|
{
|
|
|
|
|
Session.VerifyState(4, 4, DataGroups.Control, DataArgumentType.UserInterface, Message.EnableDSUIOnly);
|
|
|
|
|
using (var pending = Session.GetPendingStateChanger(5))
|
|
|
|
|
{
|
2014-04-06 06:33:21 +08:00
|
|
|
|
var rc = PInvoke.DsmEntry(Session.GetAppId(), Session.SourceId, Message.EnableDSUIOnly, userInterface);
|
2014-04-03 07:01:21 +08:00
|
|
|
|
if (rc == ReturnCode.Success)
|
|
|
|
|
{
|
|
|
|
|
pending.Commit();
|
|
|
|
|
}
|
|
|
|
|
return rc;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|