// 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 helper methods that provide a data-binding friendly way to access PrintSchema APIs. using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using Microsoft.Samples.Printing.PrinterExtension.Types; namespace Microsoft.Samples.Printing.PrinterExtension.Helpers { /// /// Contains helper methods that provide a data-binding friendly way to access PrintSchema APIs. /// public class PrintSchemaHelper { /// /// Constructor. Warning constructing this object is expensive, and is best performed /// asynchronously. /// /// The print ticket for which features/options will be retrieved /// List of features requested internal PrintSchemaHelper(IPrintSchemaTicket ticket, IEnumerable featureNameCollection) { _ticket = ticket; _featureNameCollection = featureNameCollection; _capabilities = _ticket.GetCapabilities(); } /// /// Retrieve the list of features from the current print ticket. /// public List Features { get { _featureHelperCollection = new List(); // // Retrieve the list of features supported by the driver // foreach (string name in _featureNameCollection) { // // If the feature is not present in the print ticket or the print capabilities, // ignore it and continue. // IPrintSchemaFeature ticketFeature = _ticket.GetFeatureByKeyName(name); if (ticketFeature == null) { continue; } IPrintSchemaFeature capabilitiesFeature = _capabilities.GetFeatureByKeyName(name); if (capabilitiesFeature == null) { continue; } // If the feature is not meant to be displayed on the UI, ignore it and continue. if (!capabilitiesFeature.DisplayUI) { continue; } _featureHelperCollection.Add(new PrintSchemaFeatureHelper(ticketFeature, _capabilities, capabilitiesFeature)); } return _featureHelperCollection; } } /// /// List of features requested. /// private IEnumerable _featureNameCollection; /// /// Helper objects that wrap an IPrintSchemaFeature object. /// private List _featureHelperCollection = null; /// /// Print ticket passed into this class. /// private IPrintSchemaTicket _ticket = null; /// /// Print capabilities object. /// private IPrintSchemaCapabilities _capabilities = null; } /// /// Contains helper methods that provide a data-binding friendly way to access IPrintSchemaFeature APIs. /// /// Note: This sample does not handle Print Ticket/Print Capabilities Options which rely on parameters to /// be specified, such as psk:Custom , psk:CustomSquare, or psk:CustomMediaSize. If these options are /// supported by compatible print drivers, then the printer extension should be modified to support them /// appropriately. /// public class PrintSchemaFeatureHelper { /// /// Constructor /// /// Object retrieved via a call to IPrintSchemaTicket::GetFeature/GetFeatureByKeyName /// Print capabilities object /// Object retrieved via a call to IPrintSchemaCapabilities::GetFeature/GetFeatureByKeyName internal PrintSchemaFeatureHelper(IPrintSchemaFeature ticketFeature, IPrintSchemaCapabilities capabilities, IPrintSchemaFeature capabilitiesFeature) { // // Populate the properties exposed by this class. // DisplayName = capabilitiesFeature.DisplayName; Options = new List(capabilities.GetOptions(ticketFeature)); foreach (IPrintSchemaOption option in Options) { if (option.Selected) { _selectedOption = option; break; } } _printTicketFeature = ticketFeature; } /// /// Returns the display name for the current IPrintSchemaFeature object. /// public string DisplayName { get; private set; } /// /// Retrieve the list of options supported for the current feature. /// public List Options { get; private set; } /// /// A 'get' invocation on this property returns the selected option for this print ticket feature. /// A 'set' invocation on this property sets the selected option for this print ticket feature. /// public IPrintSchemaOption SelectedOption { get { return _selectedOption; } set { _selectedOption = value; _printTicketFeature.SelectedOption = _selectedOption; } } /// /// Feature object retrieved from the print ticket. /// private IPrintSchemaFeature _printTicketFeature = null; /// /// Selected option for the print ticket feature. /// private IPrintSchemaOption _selectedOption = null; } }