diff options
| author | alexke-dev <[email protected]> | 2023-08-10 16:28:02 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-08-10 16:28:02 -0700 |
| commit | cbbd53eda55fbdf65f22b5f57c7dbc4b1ea594fd (patch) | |
| tree | 50df874afbb353d7d3864b559c6b7641f1208924 /print/v4PrintDriverSamples/PrinterExtensionSample/PrinterExtensionLibrary/PrinterExtensionAdapters.cs | |
| parent | 6ea518dd65b6c2c3b298bb8e7ed5e9124b8a4981 (diff) | |
Remove Print Driver Samples (#1017)
* Remove print driver samples. Add README.md to redirect consumers to Print Support App (PSA) development guide.
* Remove en-us from URL.
Diffstat (limited to 'print/v4PrintDriverSamples/PrinterExtensionSample/PrinterExtensionLibrary/PrinterExtensionAdapters.cs')
| -rw-r--r-- | print/v4PrintDriverSamples/PrinterExtensionSample/PrinterExtensionLibrary/PrinterExtensionAdapters.cs | 2051 |
1 files changed, 0 insertions, 2051 deletions
diff --git a/print/v4PrintDriverSamples/PrinterExtensionSample/PrinterExtensionLibrary/PrinterExtensionAdapters.cs b/print/v4PrintDriverSamples/PrinterExtensionSample/PrinterExtensionLibrary/PrinterExtensionAdapters.cs deleted file mode 100644 index 60277c61..00000000 --- a/print/v4PrintDriverSamples/PrinterExtensionSample/PrinterExtensionLibrary/PrinterExtensionAdapters.cs +++ /dev/null @@ -1,2051 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// -// Abstract: -// -// This file contains Adapters that wrap the PrinterExtension COM Interop types. -// -using System; -using System.IO; -using System.Collections; -using System.Collections.Generic; -using System.Runtime; -using System.Runtime.InteropServices; -using Microsoft.Samples.Printing.PrinterExtension.Types; - -namespace Microsoft.Samples.Printing.PrinterExtension -{ - // The following three classes are constructable adapters for the root of the - // object model. The balance of the types will typically be interfaces. This - // choice was made so we can share the interface file between projects and enforce - // the same public surface from both the "Reference" and "Implementation" projects. - - #region PrinterExtension adapter classes - - /// <summary> - /// Wraps an COM pointer to IPrinterExtensionContext - /// </summary> - public class PrinterExtensionContext : IPrinterExtensionContext - { - /// <summary> - /// Wraps an opaque COM pointer to IPrinterExtensionContext and provides usable methods - /// </summary> - /// <param name="comContext">Opaque COM pointer to IPrinterExtensionContext</param> - public PrinterExtensionContext(Object comContext) - { - _context = (PrinterExtensionLib.IPrinterExtensionContext)comContext; - } - - #region IPrinterExtensionContext methods - - /// <summary> - /// Maps to COM IPrinterExtensionContext::PrinterQueue - /// </summary> - public IPrinterQueue Queue - { - get { return new PrinterQueue(_context.PrinterQueue); } - } - - /// <summary> - /// Maps to COM IPrinterExtensionContext::PrintSchemaTicket - /// </summary> - public IPrintSchemaTicket Ticket - { - get { return new PrintSchemaTicket(_context.PrintSchemaTicket); } - } - - /// <summary> - /// Maps to COM IPrinterExtensionContext::DriverProperties - /// </summary> - public IPrinterPropertyBag DriverProperties - { - get - { - try - { - return new PrinterPropertyBag(_context.DriverProperties, PrintPropertyBagType.DriverProperties); - } - catch (Exception) - { - // If the property bag is not found, instead of - // throwing an exception, return null, which is more appropriate for a property 'get' operation. - return null; - } - } - } - - /// <summary> - /// Maps to COM IPrinterExtensionContext::UserProperties - /// </summary> - public IPrinterPropertyBag UserProperties - { - get { return new PrinterPropertyBag(_context.UserProperties, PrintPropertyBagType.UserProperties); } - } - - #endregion - - #region Implementation details - - private PrinterExtensionLib.IPrinterExtensionContext _context; - - // Prevent default construction - private PrinterExtensionContext() - { - } - - #endregion - } - - /// <summary> - /// Wraps an COM pointer to IPrinterExtensionEventArgs - /// </summary> - public class PrinterExtensionEventArgs : EventArgs, IPrinterExtensionEventArgs - { - /// <summary> - /// Wraps an opaque COM pointer to IPrinterExtensionEventArgs and provides usable methods - /// </summary> - /// <param name="comContext">Opaque COM pointer to IPrinterExtensionEventArgs</param> - public PrinterExtensionEventArgs(Object eventArgs) - { - _eventArgs = (PrinterExtensionLib.IPrinterExtensionEventArgs)eventArgs; - _context = new PrinterExtensionContext(eventArgs); - } - - #region IPrinterExtensionEventArgs methods - - /// <summary> - /// Maps to COM IPrinterExtensionEventArgs::BidiNotification - /// </summary> - public string BidiNotification - { - get { return _eventArgs.BidiNotification; } - } - - /// <summary> - /// Maps to COM IPrinterExtensionEventArgs::ReasonId - /// </summary> - public Guid ReasonId - { - get { return _eventArgs.ReasonId; } - } - - /// <summary> - /// Maps to COM IPrinterExtensionEventArgs::Request - /// </summary> - public IPrinterExtensionRequest Request - { - get { return new PrinterExtensionRequest(_eventArgs.Request); } - } - - /// <summary> - /// Maps to COM IPrinterExtensionEventArgs::SourceApplication - /// </summary> - public string SourceApplication - { - get { return _eventArgs.SourceApplication; } - } - - /// <summary> - /// Maps to COM IPrinterExtensionEventArgs::DetailedReasonId - /// </summary> - public Guid DetailedReasonId - { - get { return _eventArgs.DetailedReasonId; } - } - - /// <summary> - /// Maps to COM IPrinterExtensionEventArgs::WindowModal - /// </summary> - public bool WindowModal - { - get - { - if (_eventArgs.WindowModal != 0) - { - return true; - } - return false; - } - } - - /// <summary> - /// Maps to COM IPrinterExtensionEventArgs::WindowParent - /// </summary> - public IntPtr WindowParent - { - get { return _eventArgs.WindowParent; } - } - - #endregion - - #region IPrinterExtensionContext methods - - /// <summary> - /// Maps to COM IPrinterExtensionContext::PrinterQueue - /// </summary> - public IPrinterQueue Queue - { - get { return _context.Queue; } - } - - /// <summary> - /// Maps to COM IPrinterExtensionContext::PrintSchemaTicket - /// </summary> - public IPrintSchemaTicket Ticket - { - get { return _context.Ticket; } - } - - /// <summary> - /// Maps to COM IPrinterExtensionContext::DriverProperties - /// </summary> - public IPrinterPropertyBag DriverProperties - { - get { return _context.DriverProperties; } - } - - /// <summary> - /// Maps to COM IPrinterExtensionContext::UserProperties - /// </summary> - public IPrinterPropertyBag UserProperties - { - get { return _context.UserProperties; } - } - - #endregion - - #region Implementation details - - private PrinterExtensionLib.IPrinterExtensionEventArgs _eventArgs; - - /// <summary> - /// Containment - since multiple inheritance is not possible in C#. - /// </summary> - private PrinterExtensionContext _context; - - #endregion - } - - /// <summary> - /// This class provides wraps IPrinterExtensionContextCollection in a IEnumerable interface - /// </summary> - public sealed class PrinterQueuesEnumeratedEventArgs : EventArgs, IEnumerable<IPrinterExtensionContext> - { - - #region IEnumerable<IPrinterExtensionContext> methods - - public IEnumerator<IPrinterExtensionContext> GetEnumerator() - { - for (uint i = 0; i < _contextCollection.Count; i++) - { - yield return new PrinterExtensionContext(_contextCollection.GetAt(i)); - } - } - - IEnumerator IEnumerable.GetEnumerator() - { - return (IEnumerator)GetEnumerator(); - } - - #endregion - - #region Implementation details - - internal PrinterQueuesEnumeratedEventArgs(PrinterExtensionLib.IPrinterExtensionContextCollection contextCollection) - { - _contextCollection = contextCollection; - } - - private PrinterExtensionLib.IPrinterExtensionContextCollection _contextCollection; - - #endregion - } - -#if WINDOWS_81_APIS - internal sealed class PrinterExtensionAsyncOperation : IPrinterExtensionAsyncOperation - { - #region IPrinterExtensionAsyncOperation methods - - public void Cancel() - { - _asyncOperation.Cancel(); - } - - #endregion - - #region Implementation methods - - internal PrinterExtensionAsyncOperation(PrinterExtensionLib.IPrinterExtensionAsyncOperation asyncOperation) - { - _asyncOperation = asyncOperation; - } - - private PrinterExtensionLib.IPrinterExtensionAsyncOperation _asyncOperation; - - #endregion - } -#endif - #endregion - - #region COM Adapter Classes - - // - // The following class provide an adapter that exposes a 'Stream' and wraps a - // COM pointer to PrinterExtensionLib.IStream - // - internal class PrinterExtensionLibIStreamAdapter : Stream, IDisposable - { - public PrinterExtensionLibIStreamAdapter(PrinterExtensionLib.IStream stream, bool canWrite = false, bool canSeek = false, bool canRead = true) - { - if (stream != null) - { - _printerExtensionIStream = stream; - } - else - { - throw new ArgumentNullException("stream"); - } - _streamValidation = new StreamValidation(canWrite, canSeek, canRead); - } - - ~PrinterExtensionLibIStreamAdapter() - { - Dispose(false); - } - - #region Overridden Stream methods - - public override int Read(byte[] buffer, int offset, int count) - { - _streamValidation.ValidateRead(buffer, offset, count); - - uint bytesRead = 0; - - // Pin the byte array so that it will not be moved by the garbage collector - byte[] tempBuffer = new byte[count]; - GCHandle gcHandle = GCHandle.Alloc(tempBuffer, GCHandleType.Pinned); - try - { - _printerExtensionIStream.RemoteRead(out tempBuffer[0], Convert.ToUInt32(count), out bytesRead); - - Array.Copy(tempBuffer, 0, buffer, offset, (int)bytesRead); // Safe to cast. Cannot be bigger than 'int count' - } - finally - { - gcHandle.Free(); - } - - return (int)bytesRead; // Safe to cast; bytesRead can never be larger than 'int count' - } - - public override void Write(byte[] buffer, int offset, int count) - { - _streamValidation.ValidateWrite(buffer, offset, count); - - uint written; - - // Pin the byte array so that it will not be moved by the garbage collector - byte[] tempBuffer = new byte[count]; - GCHandle gcHandle = GCHandle.Alloc(tempBuffer, GCHandleType.Pinned); - try - { - Array.Copy(buffer, offset, tempBuffer, 0, count); - _printerExtensionIStream.RemoteWrite(ref tempBuffer[0], Convert.ToUInt32(count), out written); - } - finally - { - gcHandle.Free(); - } - - if ((int)written < count) - { - throw new IOException(); - } - } - - public override long Seek(long offset, SeekOrigin origin) - { - _streamValidation.ValidateSeek(offset, origin); - - uint istreamSeekOrigin = 0; - - switch (origin) - { - case SeekOrigin.Begin: - istreamSeekOrigin = (uint)PrinterExtensionLib.tagSTREAM_SEEK.STREAM_SEEK_SET; - break; - - case SeekOrigin.Current: - istreamSeekOrigin = (uint)PrinterExtensionLib.tagSTREAM_SEEK.STREAM_SEEK_CUR; - break; - - case SeekOrigin.End: - istreamSeekOrigin = (uint)PrinterExtensionLib.tagSTREAM_SEEK.STREAM_SEEK_END; - break; - } - - PrinterExtensionLib._LARGE_INTEGER dlibMove; - PrinterExtensionLib._ULARGE_INTEGER plibNewPosition; - - dlibMove.QuadPart = offset; - - _printerExtensionIStream.RemoteSeek(dlibMove, istreamSeekOrigin, out plibNewPosition); - return Convert.ToInt64(plibNewPosition.QuadPart); - } - - public override long Length - { - get - { - _streamValidation.ValidateSeek(); - - PrinterExtensionLib.tagSTATSTG statstg; - _printerExtensionIStream.Stat(out statstg, 1 /* STATSFLAG_NONAME*/ ); - return Convert.ToInt64(statstg.cbSize.QuadPart); - } - } - public override long Position - { - get { return Seek(0, SeekOrigin.Current); } - set { Seek(value, SeekOrigin.Begin); } - } - - public override void SetLength(long value) - { - _streamValidation.ValidateSeek(); - - PrinterExtensionLib._ULARGE_INTEGER libNewSize; - libNewSize.QuadPart = Convert.ToUInt64(value); - _printerExtensionIStream.SetSize(libNewSize); - } - - public override void Flush() - { - _printerExtensionIStream.Commit(0); - } - - public override bool CanRead - { - get { return _streamValidation.CanRead; } - } - - public override bool CanWrite - { - get { return _streamValidation.CanWrite; } - } - - public override bool CanSeek - { - get { return _streamValidation.CanSeek; } - } - - #endregion - - #region IDisposable methods - - protected override void Dispose(bool disposing) - { - if (_disposed) - { - return; - } - - try - { - if (disposing) - { - _streamValidation.Dispose(); - } - - if (_printerExtensionIStream != null) - { - Marshal.ReleaseComObject(_printerExtensionIStream); - _printerExtensionIStream = null; - } - } - finally - { - base.Dispose(disposing); - } - _disposed = true; - } - - #endregion - - #region Implementation details - - // Prevent default construction - private PrinterExtensionLibIStreamAdapter() { } - - private bool _disposed = false; - private PrinterExtensionLib.IStream _printerExtensionIStream = null; - private StreamValidation _streamValidation = null; - - #endregion - } - - - // - // The following class provide an adapter that exposes a 'Stream' and wraps a - // COM pointer to the standard COM 'IStream' interface - // - internal class ComIStreamAdapter : Stream, IDisposable - { - public ComIStreamAdapter(System.Runtime.InteropServices.ComTypes.IStream stream, bool canWrite = false, bool canSeek = false, bool canRead = true) - { - if (stream != null) - { - _comIstream = stream; - } - else - { - throw new ArgumentNullException("stream"); - } - _streamValidation = new StreamValidation(canWrite, canSeek, canRead); - } - - ~ComIStreamAdapter() - { - Dispose(false); - } - - #region Overridden Stream methods - - public override int Read(byte[] buffer, int offset, int count) - { - _streamValidation.ValidateRead(buffer, offset, count); - - uint bytesRead = 0; - - // Pin the byte array so that it will not be moved by the garbage collector - byte[] tempBuffer = new byte[count]; - GCHandle gcHandle = GCHandle.Alloc(tempBuffer, GCHandleType.Pinned); - IntPtr bytesReadPtr = Marshal.AllocHGlobal(sizeof(int)); - try - { - _comIstream.Read(tempBuffer, count, bytesReadPtr); - bytesRead = (uint)Marshal.ReadInt32(bytesReadPtr); - - Array.Copy(tempBuffer, 0, buffer, offset, (int)bytesRead); // Safe to cast. Cannot be bigger than 'int count' - } - finally - { - Marshal.FreeHGlobal(bytesReadPtr); - gcHandle.Free(); - } - - return (int)bytesRead; // Safe to cast; bytesRead can never be larger than 'int count' - } - - public override void Write(byte[] buffer, int offset, int count) - { - _streamValidation.ValidateWrite(buffer, offset, count); - - uint written; - - // Pin the byte array so that it will not be moved by the garbage collector - byte[] tempBuffer = new byte[count]; - GCHandle gcHandle = GCHandle.Alloc(tempBuffer, GCHandleType.Pinned); - IntPtr writeCountPointer = Marshal.AllocHGlobal(sizeof(int)); - try - { - Array.Copy(buffer, offset, tempBuffer, 0, count); - - _comIstream.Write(tempBuffer, count, writeCountPointer); - written = (uint)Marshal.ReadInt32(writeCountPointer); // safe to cast. 'written' is always non-negative - } - finally - { - gcHandle.Free(); - Marshal.FreeHGlobal(writeCountPointer); - } - - if ((int)written < count) - { - throw new IOException(); - } - } - - public override long Seek(long offset, SeekOrigin origin) - { - _streamValidation.ValidateSeek(offset, origin); - - uint istreamSeekOrigin = 0; - - switch (origin) - { - case SeekOrigin.Begin: - istreamSeekOrigin = (uint)PrinterExtensionLib.tagSTREAM_SEEK.STREAM_SEEK_SET; - break; - - case SeekOrigin.Current: - istreamSeekOrigin = (uint)PrinterExtensionLib.tagSTREAM_SEEK.STREAM_SEEK_CUR; - break; - - case SeekOrigin.End: - istreamSeekOrigin = (uint)PrinterExtensionLib.tagSTREAM_SEEK.STREAM_SEEK_END; - break; - } - - IntPtr seekPositionPointer = Marshal.AllocHGlobal(sizeof(long)); - long seekPosition = 0; - try - { - _comIstream.Seek(offset, (int)istreamSeekOrigin, seekPositionPointer); - seekPosition = Marshal.ReadInt64(seekPositionPointer); - } - finally - { - Marshal.FreeHGlobal(seekPositionPointer); - } - - return seekPosition; - } - - public override long Length - { - get - { - _streamValidation.ValidateSeek(); - - System.Runtime.InteropServices.ComTypes.STATSTG statstg; - _comIstream.Stat(out statstg, 1 /* STATSFLAG_NONAME*/ ); - return statstg.cbSize; - } - } - public override long Position - { - get { return Seek(0, SeekOrigin.Current); } - set { Seek(value, SeekOrigin.Begin); } - } - - public override void SetLength(long value) - { - _streamValidation.ValidateSeek(); - _comIstream.SetSize(value); - } - - public override void Flush() - { - _comIstream.Commit(0); - } - - public override bool CanRead - { - get { return _streamValidation.CanRead; } - } - - public override bool CanWrite - { - get { return _streamValidation.CanWrite; } - } - - public override bool CanSeek - { - get { return _streamValidation.CanSeek; } - } - - #endregion - - #region IDisposable methods - - protected override void Dispose(bool disposing) - { - if (_disposed) - { - return; - } - - try - { - if (disposing) - { - _streamValidation.Dispose(); - } - - if (_comIstream != null) - { - Marshal.ReleaseComObject(_comIstream); - _comIstream = null; - } - } - finally - { - base.Dispose(disposing); - } - _disposed = true; - } - - #endregion - - #region Implementation details - - // Prevent default construction - private ComIStreamAdapter() { } - - private bool _disposed = false; - private System.Runtime.InteropServices.ComTypes.IStream _comIstream = null; - private StreamValidation _streamValidation = null; - - #endregion - } - - internal class StreamValidation : IDisposable - { - internal StreamValidation(bool canWrite = false, bool canSeek = false, bool canRead = true) - { - _canWrite = canWrite; - _canSeek = canSeek; - _canRead = canRead; - } - - internal void ValidateRead(byte[] buffer, int offset, int count) - { - if (!_canRead) - { - throw new NotSupportedException(); - } - if (_disposed == true) - { - throw new ObjectDisposedException("COM IStream"); - } - if (buffer == null) - { - throw new ArgumentNullException("buffer"); - } - if (offset < 0) - { - throw new ArgumentOutOfRangeException("offset"); - } - if (count < 0) - { - throw new ArgumentOutOfRangeException("count"); - } - if ((buffer.Length - offset) < count) - { - throw new ArgumentException(); - } - } - - internal void ValidateWrite(byte[] buffer, int offset, int count) - { - if (!_canWrite) - { - throw new NotSupportedException(); - } - if (_disposed == true) - { - throw new ObjectDisposedException("COM IStream"); - } - if (buffer == null) - { - throw new ArgumentNullException("buffer"); - } - if (offset < 0) - { - throw new ArgumentOutOfRangeException("offset"); - } - if (count < 0) - { - throw new ArgumentOutOfRangeException("count"); - } - if ((buffer.Length - offset) < count) - { - throw new ArgumentException("Insufficient buffer size"); - } - } - - internal void ValidateSeek(long offset, SeekOrigin origin) - { - ValidateSeek(); - if ((origin < SeekOrigin.Begin) || (origin > SeekOrigin.End)) - { - throw new ArgumentException("Invalid value", "origin"); - } - } - - internal void ValidateSeek() - { - if (!_canSeek) - { - throw new NotSupportedException(); - } - if (_disposed == true) - { - throw new ObjectDisposedException("COM IStream"); - } - } - - public bool CanRead - { - get { return _canRead; } - } - - public bool CanWrite - { - get { return _canWrite; } - } - - public bool CanSeek - { - get { return _canSeek; } - } - - #region IDisposable methods - - public void Dispose() - { - _disposed = true; - } - - #endregion - - #region Implementation details - - private bool _disposed = false; - private bool _canWrite = false; - private bool _canSeek = false; - private bool _canRead = true; - - #endregion - } - - #endregion - - #region PrintSchema Adapter Classes - - // - // Following are concrete implementation of the PrinterExtension interfaces - // These classes wrap the underlying COM interfaces. - // - - internal class PrintSchemaOption : IPrintSchemaOption - { - - #region IPrintSchemaOption methods - - public bool Selected - { - get { return (0 == _option.Selected) ? false : true; } - } - - public PrintSchemaConstrainedSetting Constrained - { - get { return (PrintSchemaConstrainedSetting)_option.Constrained; } - } - - #endregion - - #region IPrintSchemaDisplayableElement methods - - public string DisplayName { get { return _option.DisplayName; } } - public string Name { get { return _option.Name; } } - public string XmlNamespace { get { return _option.NamespaceUri; } } - - #endregion - - #region Implementation details - - internal PrintSchemaOption(PrinterExtensionLib.IPrintSchemaOption option) - { - _option = option; - } - - internal PrinterExtensionLib.IPrintSchemaOption InteropOption - { - get { return _option; } - set { _option = value; } - } - - // - // Create the correct 'PrintSchemaOption' subclass, possibly exposing one of the these interfaces - // 1. IPrintSchemaPageMediaSizeOption - // 2. IPrintSchemaNUpOption - // - internal static IPrintSchemaOption CreateOptionSubclass(PrinterExtensionLib.IPrintSchemaOption option) - { - // IPrintSchemaNUpOption option - if (option is PrinterExtensionLib.IPrintSchemaNUpOption) - { - return new PrintSchemaNUpOption(option); - } - - // IPrintSchemaPageMediaSizeOption option - if (option is PrinterExtensionLib.IPrintSchemaPageMediaSizeOption) - { - return new PrintSchemaPageMediaSizeOption(option); - } - - return new PrintSchemaOption(option); - } - - internal PrinterExtensionLib.IPrintSchemaOption _option; - - // Prevent default constuction - private PrintSchemaOption() { } - - #endregion - } - - internal sealed class PrintSchemaPageMediaSizeOption : PrintSchemaOption, IPrintSchemaPageMediaSizeOption - { - #region IPrintSchemaPageMediaSizeOption methods - - public uint HeightInMicrons - { - get { return _pageMediaSizeOption.HeightInMicrons; } - } - - public uint WidthInMicrons - { - get { return _pageMediaSizeOption.WidthInMicrons; } - } - - #endregion - - #region Implementation details - - internal PrintSchemaPageMediaSizeOption(PrinterExtensionLib.IPrintSchemaOption option) - : base(option) - { - _pageMediaSizeOption = _option as PrinterExtensionLib.IPrintSchemaPageMediaSizeOption; - if (null == _pageMediaSizeOption) - { - throw new NotImplementedException("Could not retrieve IPrintSchemaPageMediaSizeOption interface."); - } - } - - private PrinterExtensionLib.IPrintSchemaPageMediaSizeOption _pageMediaSizeOption; - - #endregion - } - - internal sealed class PrintSchemaNUpOption : PrintSchemaOption, IPrintSchemaNUpOption - { - #region IPrintSchemaNUpOption methods - - public uint PagesPerSheet - { - get { return _nupOption.PagesPerSheet; } - } - - #endregion - - #region Implementation details - - internal PrintSchemaNUpOption(PrinterExtensionLib.IPrintSchemaOption option) : - base(option) - { - _nupOption = _option as PrinterExtensionLib.IPrintSchemaNUpOption; - if (null == _nupOption) - { - throw new NotImplementedException("Could not retrieve IPrintSchemaNUpOption interface."); - } - } - - private PrinterExtensionLib.IPrintSchemaNUpOption _nupOption; - - #endregion - } - - /// <summary> - /// This class provides wraps IPrintSchemaOptionCollection in a IEnumerable interface - /// </summary> - internal sealed class PrintSchemaOptionsCollection : IEnumerable<IPrintSchemaOption> - { - - #region IEnumerable<IPrintSchemaOption> methods - - public IEnumerator<IPrintSchemaOption> GetEnumerator() - { - for (uint i = 0; i < _optionCollection.Count; i++) - { - yield return new PrintSchemaOption(_optionCollection.GetAt(i)); - } - } - - IEnumerator IEnumerable.GetEnumerator() - { - return (IEnumerator)GetEnumerator(); - } - - #endregion - - #region Implementation details - - internal PrintSchemaOptionsCollection(PrinterExtensionLib.IPrintSchemaOptionCollection optionCollection) - { - _optionCollection = optionCollection; - } - - private PrinterExtensionLib.IPrintSchemaOptionCollection _optionCollection; - - #endregion - } - - internal sealed class PrintSchemaFeature : IPrintSchemaFeature - { - #region IPrintSchemaFeature methods - - public PrintSchemaSelectionType SelectionType - { - get { return (PrintSchemaSelectionType)_feature.SelectionType; } - } - - public IPrintSchemaOption GetOption(string name) - { - return GetOption(name, PrintSchemaConstants.KeywordsNamespaceUri); - } - - public IPrintSchemaOption GetOption(string name, string xmlNamespace) - { - PrinterExtensionLib.IPrintSchemaOption option = _feature.GetOption(name, xmlNamespace); - if (option != null) - { - return PrintSchemaOption.CreateOptionSubclass(option); - } - - return null; - } - - public IPrintSchemaOption SelectedOption - { - get - { - return PrintSchemaOption.CreateOptionSubclass(_feature.SelectedOption); - } - set - { - _feature.SelectedOption = (value as PrintSchemaOption).InteropOption; - } - } - - public bool DisplayUI - { - get - { - return (0 == _feature.DisplayUI) ? false : true; - } - } - - #endregion - - #region IPrintSchemaDisplayableElement methods - - public string DisplayName { get { return _feature.DisplayName; } } - public string Name { get { return _feature.Name; } } - public string XmlNamespace { get { return _feature.NamespaceUri; } } - - #endregion - - #region Implementation details - - internal PrintSchemaFeature(PrinterExtensionLib.IPrintSchemaFeature feature) - { - _feature = feature; - } - - internal PrinterExtensionLib.IPrintSchemaFeature InteropFeature - { - get { return _feature; } - } - - private PrinterExtensionLib.IPrintSchemaFeature _feature; - - #endregion - } - - internal sealed class PrintSchemaPageImageableSize : IPrintSchemaPageImageableSize - { - #region IPrintSchemaPageImageableSize methods - - public uint ExtentHeightInMicrons - { - get { return _pageImageableSize.ExtentHeightInMicrons; } - } - - public uint ExtentWidthInMicrons - { - get { return _pageImageableSize.ExtentWidthInMicrons; } - } - - public uint ImageableSizeHeightInMicrons - { - get { return _pageImageableSize.ImageableSizeHeightInMicrons; } - } - - public uint ImageableSizeWidthInMicrons - { - get { return _pageImageableSize.ImageableSizeWidthInMicrons; } - } - - public uint OriginHeightInMicrons - { - get { return _pageImageableSize.OriginHeightInMicrons; } - } - - public uint OriginWidthInMicrons - { - get { return _pageImageableSize.OriginWidthInMicrons; } - } - - #endregion - - #region IPrintSchemaElement methods - - public string Name { get { return _pageImageableSize.Name; } } - public string XmlNamespace { get { return _pageImageableSize.NamespaceUri; } } - - #endregion - - #region Implementation details - - internal PrintSchemaPageImageableSize(PrinterExtensionLib.IPrintSchemaPageImageableSize pageImageableSize) - { - _pageImageableSize = pageImageableSize; - } - - private PrinterExtensionLib.IPrintSchemaPageImageableSize _pageImageableSize; - - #endregion - } - -#if WINDOWS_81_APIS - internal sealed class PrintSchemaParameterDefinition : IPrintSchemaParameterDefinition - { - #region IPrintSchemaParameterDefinition methods - - public bool UserInputRequired - { - get - { - if (_parameter.UserInputRequired != 0) - { - return true; - } - return false; - } - } - - public string UnitType - { - get { return _parameter.UnitType; } - } - - public PrintSchemaParameterDataType DataType - { - get { return (PrintSchemaParameterDataType)_parameter.DataType; } - } - - public int RangeMin - { - get { return _parameter.RangeMin; } - } - - public int RangeMax - { - get { return _parameter.RangeMax; } - } - #endregion - - #region IPrintSchemaDisplayableItem methods - - public string DisplayName { get { return _parameter.DisplayName; } } - public string Name { get { return _parameter.Name; } } - public string XmlNamespace { get { return _parameter.NamespaceUri; } } - - #endregion - - #region Implementation details - - internal PrintSchemaParameterDefinition(PrinterExtensionLib.IPrintSchemaParameterDefinition parameter) - { - _parameter = parameter; - } - - private PrinterExtensionLib.IPrintSchemaParameterDefinition _parameter; - - #endregion - } - - internal sealed class PrintSchemaParameterInitializer : IPrintSchemaParameterInitializer - { - #region IPrintSchemaParameterInitializer methods - - public string StringValue - { - get - { - object value = _parameter.get_Value(); - return (string)value; - } - set - { - _parameter.set_Value(value); - } - } - - public int IntegerValue - { - get - { - object value = _parameter.get_Value(); - return (int)value; - } - set - { - _parameter.set_Value(value); - } - } - #endregion - - #region IPrintSchemaElement methods - - public string Name { get { return _parameter.Name; } } - public string XmlNamespace { get { return _parameter.NamespaceUri; } } - - #endregion - - #region Implementation details - - internal PrintSchemaParameterInitializer(PrinterExtensionLib.IPrintSchemaParameterInitializer parameter) - { - _parameter = parameter; - } - - PrinterExtensionLib.IPrintSchemaParameterInitializer _parameter; - - #endregion - } -#endif - - internal sealed class PrintSchemaCapabilities : IPrintSchemaCapabilities - { - #region IPrintSchemaCapabilities methods - - public IPrintSchemaFeature GetFeatureByKeyName(string keyName) - { - PrinterExtensionLib.IPrintSchemaFeature feature = _capabilities.GetFeatureByKeyName(keyName); - if (feature != null) - { - return new PrintSchemaFeature(feature); - } - - return null; - } - - public IPrintSchemaFeature GetFeature(string featureName) - { - return GetFeature(featureName, PrintSchemaConstants.KeywordsNamespaceUri); - } - - public IPrintSchemaFeature GetFeature(string featureName, string xmlNamespace) - { - PrinterExtensionLib.IPrintSchemaFeature feature = _capabilities.GetFeature(featureName, xmlNamespace); - if (feature != null) - { - return new PrintSchemaFeature(feature); - } - - return null; - } - - public IPrintSchemaPageImageableSize PageImageableSize - { - get { return new PrintSchemaPageImageableSize(_capabilities.PageImageableSize); } - } - - public uint JobCopiesAllDocumentsMaxValue - { - get - { - uint value = _capabilities.JobCopiesAllDocumentsMaxValue; - if (value == 0) - { - throw new NotSupportedException("Property \"JobCopiesAllDocumentsMaxValue\" not found in print capabilities."); - } - - return value; - } - } - - public uint JobCopiesAllDocumentsMinValue - { - get - { - uint value = _capabilities.JobCopiesAllDocumentsMinValue; - if (value == 0) - { - throw new NotSupportedException("Property \"JobCopiesAllDocumentsMinValue\" not found in print capabilities."); - } - - return value; - } - } - - public IPrintSchemaOption GetSelectedOptionInPrintTicket(IPrintSchemaFeature feature) - { - PrintSchemaFeature f = feature as PrintSchemaFeature; - PrinterExtensionLib.IPrintSchemaOption option = _capabilities.GetSelectedOptionInPrintTicket(f.InteropFeature); - - if (option != null) - { - return PrintSchemaOption.CreateOptionSubclass(option); - } - - return null; - } - - public IEnumerable<IPrintSchemaOption> GetOptions(IPrintSchemaFeature pFeature) - { - return new PrintSchemaOptionsCollection( - _capabilities.GetOptions( - (pFeature as PrintSchemaFeature).InteropFeature) - ); - } - - public Stream GetReadStream() - { - return new ComIStreamAdapter(XmlStream, - false, // canWrite - true, // canSeek - true // canRead - ); - } - - public Stream GetWriteStream() - { - return new ComIStreamAdapter(XmlStream, - true, // canWrite - true, // canSeek - false // canRead - ); - } - -#if WINDOWS_81_APIS - public IPrintSchemaParameterDefinition GetParameterDefinition(string parameterName) - { - return GetParameterDefinition(parameterName, PrintSchemaConstants.KeywordsNamespaceUri); - } - - public IPrintSchemaParameterDefinition GetParameterDefinition(string parameterName, string xmlNamespace) - { - PrinterExtensionLib.IPrintSchemaParameterDefinition parameter = _capabilities2.GetParameterDefinition(parameterName, xmlNamespace); - if (parameter != null) - { - return new PrintSchemaParameterDefinition(parameter); - } - - return null; - } -#endif - - private System.Runtime.InteropServices.ComTypes.IStream XmlStream - { - get - { - System.Runtime.InteropServices.ComTypes.IStream istream = _capabilities.XmlNode as System.Runtime.InteropServices.ComTypes.IStream; - - return istream; - } - } - - #endregion - - #region Implementation details - - internal PrintSchemaCapabilities(PrinterExtensionLib.IPrintSchemaCapabilities caps) - { - _capabilities = caps; -#if WINDOWS_81_APIS - _capabilities2 = (PrinterExtensionLib.IPrintSchemaCapabilities2)caps; -#endif - } - - private PrinterExtensionLib.IPrintSchemaCapabilities _capabilities; -#if WINDOWS_81_APIS - private PrinterExtensionLib.IPrintSchemaCapabilities2 _capabilities2; -#endif - #endregion - } - - internal class PrintSchemaAsyncOperation : IPrintSchemaAsyncOperation - { - #region IPrintSchemaAsyncOperation methods - - public void Cancel() - { - _asyncOperation.Cancel(); - } - - public void Start() - { - _asyncOperation.Start(); - } - - public event EventHandler<PrintSchemaAsyncOperationEventArgs> Completed; - - #endregion - - #region Implementation details - - internal PrintSchemaAsyncOperation(PrinterExtensionLib.PrintSchemaAsyncOperation asyncOperation) - { - _asyncOperation = asyncOperation; - _asyncOperation.Completed += _asyncOperation_Completed; - } - - void _asyncOperation_Completed(PrinterExtensionLib.IPrintSchemaTicket printTicket, int hrOperation) - { - if (Completed != null) - { - IPrintSchemaTicket ticket = new PrintSchemaTicket(printTicket); - Completed(this, new PrintSchemaAsyncOperationEventArgs(ticket, hrOperation)); - } - - // This subscriber object (current object) holds a reference to the publishing object (i.e the underlying COM object) - // because it is a class member, and the publishing object holds a reference to the subscriber via the registered delegate. - // This implies neither object will be garbage collected until the application terminates. - // It's expected the event is fired once per instance so unsubscribing the delegate has no side effects. - _asyncOperation.Completed -= _asyncOperation_Completed; - Marshal.ReleaseComObject(_asyncOperation); - _asyncOperation = null; - } - - private PrinterExtensionLib.PrintSchemaAsyncOperation _asyncOperation; - - #endregion - } - - internal class PrintSchemaTicket : IPrintSchemaTicket - { - - #region IPrintSchemaTicket methods - - public IPrintSchemaCapabilities GetCapabilities() - { - return new PrintSchemaCapabilities(_printTicket.GetCapabilities()); - } - - public IPrintSchemaFeature GetFeature(string featureName) - { - return GetFeature(featureName, PrintSchemaConstants.KeywordsNamespaceUri); - } - - public IPrintSchemaFeature GetFeature(string featureName, string xmlNamespace) - { - PrinterExtensionLib.IPrintSchemaFeature feature = _printTicket.GetFeature(featureName, xmlNamespace); - if (feature != null) - { - return new PrintSchemaFeature(feature); - } - - return null; - } - - public IPrintSchemaFeature GetFeatureByKeyName(string keyName) - { - PrinterExtensionLib.IPrintSchemaFeature feature = _printTicket.GetFeatureByKeyName(keyName); - if (feature != null) - { - return new PrintSchemaFeature(feature); - } - - return null; - } - - public uint JobCopiesAllDocuments - { - get - { - uint value = _printTicket.JobCopiesAllDocuments; - if (value == 0) - { - throw new NotSupportedException("Property \"JobCopiesAllDocuments\" not found in print ticket."); - } - - return value; - } - set - { - _printTicket.JobCopiesAllDocuments = value; - } - } - - public Stream GetReadStream() - { - return new ComIStreamAdapter(XmlStream, - false, // canWrite - true, // canSeek - true // canRead - ); - } - - public Stream GetWriteStream() - { - return new ComIStreamAdapter(XmlStream, - true, // canWrite - true, // canSeek - false // canRead - ); - } - - private System.Runtime.InteropServices.ComTypes.IStream XmlStream - { - get - { - System.Runtime.InteropServices.ComTypes.IStream istream = _printTicket.XmlNode as System.Runtime.InteropServices.ComTypes.IStream; - - return istream; - } - } - - public IPrintSchemaAsyncOperation ValidateAsync() - { - PrinterExtensionLib.PrintSchemaAsyncOperation interopAsyncOperation; - _printTicket.ValidateAsync(out interopAsyncOperation); - return new PrintSchemaAsyncOperation(interopAsyncOperation); - } - - public IPrintSchemaAsyncOperation CommitAsync(IPrintSchemaTicket printTicketCommit) - { - PrinterExtensionLib.IPrintSchemaTicket interopTicket = (printTicketCommit as PrintSchemaTicket)._printTicket; - PrinterExtensionLib.PrintSchemaAsyncOperation interopAsyncOperation; - _printTicket.CommitAsync(interopTicket, out interopAsyncOperation); - return new PrintSchemaAsyncOperation(interopAsyncOperation); - } - - public void NotifyXmlChanged() - { - _printTicket.NotifyXmlChanged(); - } -#if WINDOWS_81_APIS - public IPrintSchemaParameterInitializer GetParameterInitializer(string parameterName) - { - return GetParameterInitializer(parameterName, PrintSchemaConstants.KeywordsNamespaceUri); - } - - public IPrintSchemaParameterInitializer GetParameterInitializer(string parameterName, string xmlNamespace) - { - PrinterExtensionLib.IPrintSchemaParameterInitializer parameter = _printTicket2.GetParameterInitializer(parameterName, xmlNamespace); - if (parameter != null) - { - return new PrintSchemaParameterInitializer(parameter); - } - - return null; - } -#endif - - #endregion - - #region Implementation details - - internal PrintSchemaTicket(PrinterExtensionLib.IPrintSchemaTicket printTicket) - { - _printTicket = printTicket; -#if WINDOWS_81_APIS - _printTicket2 = (PrinterExtensionLib.IPrintSchemaTicket2)printTicket; -#endif - } - - private PrinterExtensionLib.IPrintSchemaTicket _printTicket; -#if WINDOWS_81_APIS - private PrinterExtensionLib.IPrintSchemaTicket2 _printTicket2; -#endif - - #endregion - } - - internal enum PrintPropertyBagType - { - QueueProperties, - DriverProperties, - UserProperties - } - - internal class PrinterPropertyBag : IPrinterPropertyBag - { - #region IPrinterPropertyBag methods - - public bool GetBool(string propertyName) - { - try - { - int integerEquivalent = _bag.GetBool(propertyName); - bool boolEquivalent = true; - if (integerEquivalent == 0) - { - boolEquivalent = false; - } - return boolEquivalent; - } - catch (ArgumentException e) - { - // Fix the type of exception thrown when the property does not exist. - if (ShouldConvertExceptionType(e)) - { - throw new FileNotFoundException("", e); - } - throw; - } - } - - public byte[] GetBytes(string propertyName) - { - try - { - uint count = 0; - IntPtr intptrData = Marshal.AllocCoTaskMem(IntPtr.Size); - _bag.GetBytes( - propertyName, - out count, - intptrData); - - byte[] data = new byte[count]; - Marshal.Copy(Marshal.ReadIntPtr(intptrData), data, 0, (int)count); - Marshal.FreeCoTaskMem(Marshal.ReadIntPtr(intptrData)); - Marshal.FreeCoTaskMem(intptrData); - return data; - } - catch (ArgumentException e) - { - // Fix the type of exception thrown when the property does not exist. - if (ShouldConvertExceptionType(e)) - { - throw new FileNotFoundException("", e); - } - throw; - } - } - - public int GetInt(string propertyName) - { - try - { - return _bag.GetInt32(propertyName); - } - catch (ArgumentException e) - { - // Fix the type of exception thrown when the property does not exist. - if (ShouldConvertExceptionType(e)) - { - throw new FileNotFoundException("", e); - } - throw; - } - } - - public string GetString(string propertyName) - { - try - { - return _bag.GetString(propertyName); - } - catch (ArgumentException e) - { - // Fix the type of exception thrown when the property does not exist. - if (ShouldConvertExceptionType(e)) - { - throw new FileNotFoundException("", e); - } - throw; - } - } - - public void SetBool(string propertyName, bool value) - { - int integerEquivalent = 1; - if (value == false) - { - integerEquivalent = 0; - } - - _bag.SetBool(propertyName, integerEquivalent); - } - - public void SetBytes(string propertyName, byte[] data) - { - // Pin the byte array so that it will not be moved by the garbage collector - // This would not be required if the COM Interop function took in a byte[] parameter - // as opposed to a byte parameter - GCHandle gcHandle = GCHandle.Alloc(data, GCHandleType.Pinned); - try - { - _bag.SetBytes(propertyName, Convert.ToUInt32(data.Length), ref data[0]); - } - finally - { - gcHandle.Free(); - } - } - - public void SetInt(string propertyName, int value) - { - _bag.SetInt32(propertyName, value); - } - - public void SetString(string propertyName, string value) - { - _bag.SetString(propertyName, value); - } - - public Stream GetReadStream(string propertyName) - { - try - { - return new PrinterExtensionLibIStreamAdapter(_bag.GetReadStream(propertyName), false, true, true); - } - catch (COMException e) - { - // Fix the type of exception thrown when the property does not exist. - if (ShouldConvertExceptionType(e)) - { - throw new FileNotFoundException("", e); - } - throw; - } - } - - public Stream GetWriteStream(string propertyName) - { - return new PrinterExtensionLibIStreamAdapter(_bag.GetWriteStream(propertyName), true, true, false); - } - - #endregion - - #region Indexer - - public PrinterProperty this[string name] - { - get { return new PrinterProperty(this, name); } - } - - #endregion - - #region Implementation details - - internal PrinterPropertyBag(PrinterExtensionLib.IPrinterPropertyBag bag, PrintPropertyBagType type) - { - _bag = bag; - _type = type; - } - - /// <summary> - /// Check if exception thrown when a property is not found in a property bag needs to be converted. - /// </summary> - /// <param name="e"></param> - /// <returns>True if the exception type needs to be converted.</returns> - private bool ShouldConvertExceptionType(Exception e) - { - // Only the driver property bag throws exceptions other than 'FileNotFoundException' - // when a property is not found. - if (_type != PrintPropertyBagType.DriverProperties) - { - return false; - } - else if (e is ArgumentException) - { - return true; - } - else if (e is COMException) - { - // Since there is no portable way to check the HRESULT across classic .Net and - // .Net for Windows Store apps, all COMExceptions encountered are converted. - return true; - } - return false; - } - - private PrinterExtensionLib.IPrinterPropertyBag _bag; - private PrintPropertyBagType _type; - - #endregion - } - -#if WINDOWS_81_APIS - public sealed class PrintJob : IPrintJob - { - #region IPrintJob methods - - public string Name - { - get { return _job.Name; } - } - - public ulong Id - { - get { return _job.Id; } - } - - public ulong PrintedPages - { - get { return _job.PrintedPages; } - } - - public ulong TotalPages - { - get { return _job.TotalPages; } - } - - public PrintJobStatus Status - { - get { return (PrintJobStatus)_job.Status; } - } - - public DateTime SubmissionTime - { - get { return _job.SubmissionTime; } - } - - public void RequestCancel() - { - _job.RequestCancel(); - } - - #endregion - - #region Implementation details - - internal PrintJob(PrinterExtensionLib.IPrintJob job) - { - _job = job; - } - - PrinterExtensionLib.IPrintJob _job; - - #endregion - } - - /// <summary> - /// This class provides wraps IPrintJobCollection in a IEnumerable interface - /// </summary> - public sealed class PrintJobCollection : IEnumerable<IPrintJob> - { - #region IEnumerable<IPrintJob> methods - - public IEnumerator<IPrintJob> GetEnumerator() - { - for (uint i = 0; i < _jobCollection.Count; i++) - { - yield return new PrintJob(_jobCollection.GetAt(i)); - } - } - - IEnumerator IEnumerable.GetEnumerator() - { - return (IEnumerator)GetEnumerator(); - } - - #endregion - - #region Implementation details - - internal PrintJobCollection(PrinterExtensionLib.IPrintJobCollection jobCollection) - { - _jobCollection = jobCollection; - } - - private PrinterExtensionLib.IPrintJobCollection _jobCollection; - - #endregion - } - - internal sealed class PrinterQueueView : IPrinterQueueView - { - #region IPrinterQueueView methods - - public void SetViewRange(uint viewOffset, uint viewSize) - { - _view.SetViewRange(viewOffset, viewSize); - } - - public event EventHandler<PrinterQueueViewEventArgs> OnChanged - { - add - { - if (_onChanged == null) - { - _view.OnChanged += _view_OnChanged; - } - _onChanged += value; - } - remove - { - _onChanged -= value; - if (_onChanged == null) - { - _view.OnChanged -= _view_OnChanged; - } - } - } - - #endregion - - #region Implementation details - - internal PrinterQueueView(PrinterExtensionLib.PrinterQueueView view) - { - _view = view; - } - - void _view_OnChanged(PrinterExtensionLib.IPrintJobCollection pCollection, uint ulViewOffset, uint ulViewSize, uint ulCountJobsInPrintQueue) - { - if (_onChanged != null) - { - _onChanged(this, new PrinterQueueViewEventArgs(new PrintJobCollection(pCollection), ulViewOffset, ulViewSize, ulCountJobsInPrintQueue)); - } - } - - private PrinterExtensionLib.PrinterQueueView _view; - private event EventHandler<PrinterQueueViewEventArgs> _onChanged; - - #endregion - } - - internal sealed class PrinterBidiSetRequestCallback : PrinterExtensionLib.IPrinterBidiSetRequestCallback - { - #region IPrinterBidiSetRequestCallback methods - - public void Completed(string response, int statusHResult) - { - _callback.Completed(response, statusHResult); - } - - #endregion - - #region Implementation details - - internal PrinterBidiSetRequestCallback(IPrinterBidiSetRequestCallback callback) - { - _callback = callback; - } - - private IPrinterBidiSetRequestCallback _callback; - - #endregion - } -#endif - - internal sealed class PrinterQueue : IPrinterQueue - { - #region IPrinterQueue methods - - public string Name - { - get { return _queue.Name; } - } - - public void SendBidiQuery(string bidiQuery) - { - _queue.SendBidiQuery(bidiQuery); - } - - public IntPtr Handle - { - get { return _queue.Handle; } - } - - public IPrinterPropertyBag GetProperties() - { - return new PrinterPropertyBag(_queue.GetProperties(), PrintPropertyBagType.QueueProperties); - } - public event EventHandler<PrinterQueueEventArgs> OnBidiResponseReceived - { - add - { - if (_onBidiResponseReceived == null) - { - _queue.OnBidiResponseReceived += _queue_OnBidiResponseReceived; - } - _onBidiResponseReceived += value; - } - remove - { - _onBidiResponseReceived -= value; - if (_onBidiResponseReceived == null) - { - _queue.OnBidiResponseReceived -= _queue_OnBidiResponseReceived; - } - } - } - -#if WINDOWS_81_APIS - public IPrinterExtensionAsyncOperation SendBidiSetRequestAsync(string bidiRequest, IPrinterBidiSetRequestCallback callback) - { - PrinterBidiSetRequestCallback comCallback = new PrinterBidiSetRequestCallback(callback); - PrinterExtensionLib.IPrinterBidiSetRequestCallback comCallbackInterface = comCallback; - return new PrinterExtensionAsyncOperation(_queue2.SendBidiSetRequestAsync(bidiRequest, comCallbackInterface)); - } - - public IPrinterQueueView GetPrinterQueueView(uint viewOffset, uint viewSize) - { - return new PrinterQueueView(_queue2.GetPrinterQueueView(viewOffset, viewSize)); - } -#endif - - #endregion - - #region Implementation details - - internal PrinterQueue(PrinterExtensionLib.PrinterQueue queue) - { - _queue = queue; -#if WINDOWS_81_APIS - _queue2 = (PrinterExtensionLib.IPrinterQueue2)queue; -#endif - } - - private void _queue_OnBidiResponseReceived(string bstrResponse, int hrStatus) - { - if (_onBidiResponseReceived != null) - { - _onBidiResponseReceived(this, new PrinterQueueEventArgs(bstrResponse, hrStatus)); - } - } - - private event EventHandler<PrinterQueueEventArgs> _onBidiResponseReceived; -#if WINDOWS_81_APIS - private PrinterExtensionLib.IPrinterQueue2 _queue2; -#endif - private PrinterExtensionLib.PrinterQueue _queue; - - #endregion - } - - internal sealed class PrinterExtensionRequest : IPrinterExtensionRequest - { - #region IPrinterExtensionRequest methods - - public void Complete() - { - _request.Complete(); - } - - public void Cancel(int hr, string logMessage) - { - _request.Cancel(hr, logMessage); - } - - #endregion - - #region Implementation details - - internal PrinterExtensionRequest(PrinterExtensionLib.IPrinterExtensionRequest request) - { - _request = request; - } - - private PrinterExtensionLib.IPrinterExtensionRequest _request; - - #endregion - } - - #endregion -} - |
