private static void Copy <T>(DevModeFields mask, DevModeFields field, T value, Action <T> setter) { if ((mask & field) == mask) { setter(value); } }
/// <summary> /// Merges delta PrintTicket with base PrintTicket and then validates the merged PrintTicket. /// </summary> /// <param name="basePrintTicket">The MemoryStream that contains base XML PrintTicket.</param> /// <param name="deltaPrintTicket">The MemoryStream that contains delta XML PrintTicket.</param> /// <param name="scope">scope that delta PrintTicket and result PrintTicket will be limited to</param> /// <param name="conflictStatus">The returned conflict resolving status.</param> /// <returns>MemoryStream that contains validated and merged PrintTicket XML.</returns> /// <exception cref="ObjectDisposedException"> /// The PTProvider instance has already been disposed. /// </exception> /// <exception cref="ArgumentException"> /// The base PrintTicket specified by <paramref name="basePrintTicket"/> is not well-formed, /// or delta PrintTicket specified by <paramref name="deltaPrintTicket"/> is not well-formed. /// </exception> /// <exception cref="PrintQueueException"> /// The PTProvider instance failed to merge and validate the input PrintTicket(s). /// </exception> public override MemoryStream MergeAndValidatePrintTicket(MemoryStream basePrintTicket, MemoryStream deltaPrintTicket, PrintTicketScope scope, out ConflictStatus conflictStatus) { VerifyAccess(); DevModeFields supportedFields = DevModeFields.All; DevMode defaultDevMode = GetDEVMODE(BaseDevModeType.PrinterDefault); InternalPrintTicket baseTicket = (basePrintTicket != null) ? new InternalPrintTicket(basePrintTicket) : null; DevMode baseDevMode = defaultDevMode.Clone(); PrintTicketToDevMode(baseDevMode, baseTicket, scope, supportedFields); InternalPrintTicket deltaTicket = (deltaPrintTicket != null) ? new InternalPrintTicket(deltaPrintTicket) : null; DevMode deltaDevMode = defaultDevMode.Clone(); PrintTicketToDevMode(deltaDevMode, deltaTicket, scope, supportedFields); // DevMode Merge - Copy fields set in baseDevMode but not set in deltaDevMode deltaDevMode.Copy(baseDevMode, baseDevMode.Fields & (~deltaDevMode.Fields)); conflictStatus = Validate(deltaDevMode) ? ConflictStatus.NoConflict : ConflictStatus.ConflictResolved; InternalPrintTicket validatedTicket = DevModeToPrintTicket(deltaDevMode, scope, supportedFields); return(validatedTicket.XmlStream); }
/// <summary> /// Copies DevMode fields /// </summary> /// <param name="src">Source DevMode to copy from</param> /// <param name="fields">Fields to copy</param> public void Copy(DevMode src, DevModeFields fields) { if (src == null) { return; } Copy(DevModeFields.DM_ORIENTATION, fields, src.Orientation, (DevModeOrientation value) => this.Orientation = value); Copy(DevModeFields.DM_PAPERSIZE, fields, src.PaperSize, (short value) => this.PaperSize = value); Copy(DevModeFields.DM_PAPERLENGTH, fields, src.PaperLength, (short value) => this.PaperLength = value); Copy(DevModeFields.DM_PAPERWIDTH, fields, src.PaperWidth, (short value) => this.PaperWidth = value); Copy(DevModeFields.DM_SCALE, fields, src.Scale, (short value) => this.Scale = value); Copy(DevModeFields.DM_COPIES, fields, src.Copies, (short value) => this.Copies = value); Copy(DevModeFields.DM_DEFAULTSOURCE, fields, src.DefaultSource, (short value) => this.DefaultSource = value); Copy(DevModeFields.DM_PRINTQUALITY, fields, src.PrintQuality, (short value) => this.PrintQuality = value); Copy(DevModeFields.DM_COLOR, fields, src.Color, (DevModeColor value) => this.Color = value); Copy(DevModeFields.DM_DUPLEX, fields, src.Duplex, (DevModeDuplex value) => this.Duplex = value); Copy(DevModeFields.DM_YRESOLUTION, fields, src.YResolution, (short value) => this.YResolution = value); Copy(DevModeFields.DM_TTOPTION, fields, src.TTOption, (DevModeTrueTypeOption value) => this.TTOption = value); Copy(DevModeFields.DM_COLLATE, fields, src.Collate, (DevModeCollate value) => this.Collate = value); Copy(DevModeFields.DM_FORMNAME, fields, src.FormName, (string value) => this.FormName = value); Copy(DevModeFields.DM_NUP, fields, src.Nup, (DevModeNUp value) => this.Nup = value); Copy(DevModeFields.DM_ICMMETHOD, fields, src.ICMMethod, (DevModeICMMethod value) => this.ICMMethod = value); Copy(DevModeFields.DM_ICMINTENT, fields, src.ICMIntent, (uint value) => this.ICMIntent = value); Copy(DevModeFields.DM_MEDIATYPE, fields, src.MediaType, (uint value) => this.MediaType = value); Copy(DevModeFields.DM_DITHERTYPE, fields, src.DitherType, (uint value) => this.DitherType = value); }
private bool GetBoolCapability(DevModeFields capability) { // Several capabilities are packed into the DC_FIELDS capability // Call it once and cache the result to save on extra calls to GetIntCapability if (!this._dmFieldsIsCached) { this._dmFields = (DevModeFields)GetIntCapability(DeviceCapability.DC_FIELDS); this._dmFieldsIsCached = true; } return((capability & this._dmFields) == capability); }
private InternalPrintTicket DevModeToPrintTicket(DevMode devmode, PrintTicketScope scope, DevModeFields supportedFields) { InternalPrintTicket resultTicket = new InternalPrintTicket(); PrintSchemaShim.TryEmbedDevMode(resultTicket, this.OemDriverNamespace, devmode); PrintSchemaShim.CopyDevModeToTicket(resultTicket, devmode, scope, supportedFields); return(resultTicket); }
private void PrintTicketToDevMode(DevMode devMode, InternalPrintTicket ticket, PrintTicketScope scope, DevModeFields supportedFields) { if (ticket != null) { // Apply the DEVMODE snapshot from the print ticket to our starting DEVMODE, if supported. DevMode ticketDevMode = PrintSchemaShim.TryGetEmbeddedDevMode(ticket, this.OemDriverNamespace); if (ticketDevMode != null) { devMode.CompatibleCopy(ticketDevMode); } PrintSchemaShim.CopyTicketToDevMode(devMode, ticket, scope, supportedFields); } }
private void SetField(DevModeFields field) { this.Fields |= field; }
public bool IsAnyFieldSet(DevModeFields fields) { return((this.Fields & fields) != 0x00); }
public bool IsFieldSet(DevModeFields field) { return((this.Fields & field) == field); }