You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			552 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			552 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //
 | |
| // System.Drawing.PrinterSettings.cs
 | |
| //
 | |
| // Authors:
 | |
| //   Dennis Hayes (dennish@Raytek.com)
 | |
| //   Herve Poussineau (hpoussineau@fr.st)
 | |
| //   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
 | |
| //
 | |
| // (C) 2002 Ximian, Inc
 | |
| // Copyright (C) 2004,2006 Novell, Inc (http://www.novell.com)
 | |
| //
 | |
| // Permission is hereby granted, free of charge, to any person obtaining
 | |
| // a copy of this software and associated documentation files (the
 | |
| // "Software"), to deal in the Software without restriction, including
 | |
| // without limitation the rights to use, copy, modify, merge, publish,
 | |
| // distribute, sublicense, and/or sell copies of the Software, and to
 | |
| // permit persons to whom the Software is furnished to do so, subject to
 | |
| // the following conditions:
 | |
| // 
 | |
| // The above copyright notice and this permission notice shall be
 | |
| // included in all copies or substantial portions of the Software.
 | |
| // 
 | |
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 | |
| // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 | |
| // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 | |
| // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 | |
| // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 | |
| // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 | |
| // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | |
| //
 | |
| 
 | |
| using System.Runtime.InteropServices;
 | |
| using System.Collections;
 | |
| using System.Collections.Specialized;
 | |
| using System.ComponentModel;
 | |
| using System.Drawing.Imaging;
 | |
| 
 | |
| namespace System.Drawing.Printing
 | |
| {
 | |
| 	[Serializable]
 | |
| 	public class PrinterSettings : ICloneable
 | |
| 	{
 | |
| 		private string printer_name;
 | |
| 		private string print_filename;
 | |
| 		private short copies;
 | |
| 		private int maximum_page;
 | |
| 		private int minimum_page; 
 | |
| 		private int from_page;
 | |
| 		private int to_page;
 | |
| 		private bool collate;
 | |
| 		private PrintRange print_range;
 | |
| 		internal int maximum_copies;
 | |
| 		internal bool can_duplex;
 | |
| 		internal bool supports_color;
 | |
| 		internal int landscape_angle;		
 | |
| 		private bool print_tofile;
 | |
| 		internal PrinterSettings.PrinterResolutionCollection printer_resolutions;
 | |
| 		internal PrinterSettings.PaperSizeCollection paper_sizes;
 | |
| 		internal PrinterSettings.PaperSourceCollection paper_sources;
 | |
| 		private PageSettings default_pagesettings;
 | |
| 		private Duplex duplex;
 | |
| 		internal bool is_plotter;
 | |
| 		private PrintingServices printing_services;
 | |
| 		
 | |
| 		internal NameValueCollection printer_capabilities; // this stores a list of all the printer options. Used only in cups, but might come in handy on win too.
 | |
| 		public PrinterSettings() : this (SysPrn.CreatePrintingService ())
 | |
| 		{			
 | |
| 		}
 | |
| 		
 | |
| 		internal PrinterSettings (PrintingServices printing_services)
 | |
| 		{
 | |
| 			this.printing_services = printing_services;
 | |
| 			printer_name = printing_services.DefaultPrinter;
 | |
| 			ResetToDefaults ();
 | |
| 			printing_services.LoadPrinterSettings (printer_name, this);
 | |
| 		}
 | |
| 		
 | |
| 		private void ResetToDefaults ()
 | |
| 		{			
 | |
| 			printer_resolutions = null;
 | |
| 			paper_sizes = null;
 | |
| 			paper_sources = null;
 | |
| 			default_pagesettings = null;
 | |
| 			maximum_page = 9999; 	
 | |
| 			copies = 1;
 | |
| 			collate = true;
 | |
| 		}
 | |
| 	
 | |
| 		//properties
 | |
| 		
 | |
| 		public bool CanDuplex
 | |
| 		{
 | |
| 			get { return can_duplex; }
 | |
| 		}
 | |
| 		
 | |
| 		public bool Collate
 | |
| 		{
 | |
| 			get { return collate; }
 | |
| 			set { collate = value; }
 | |
| 		}
 | |
| 
 | |
| 		public short Copies
 | |
| 		{
 | |
| 			get { return copies; }
 | |
| 			set { 
 | |
| 				if (value < 0)
 | |
| 					throw new ArgumentException ("The value of the Copies property is less than zero.");
 | |
| 				
 | |
| 				copies = value;
 | |
| 			}
 | |
| 		}
 | |
| 		
 | |
| 		public PageSettings DefaultPageSettings
 | |
| 		{
 | |
| 			get {
 | |
| 				if (default_pagesettings == null) {
 | |
| 					default_pagesettings = new PageSettings (this,
 | |
| 						SupportsColor,
 | |
| 						false,	
 | |
| 						// Real defaults are set by LoadPrinterSettings				
 | |
| 						new PaperSize("A4", 827, 1169),						
 | |
| 						new PaperSource("Tray", PaperSourceKind.FormSource),						
 | |
| 						new PrinterResolution(200, 200, PrinterResolutionKind.Medium));
 | |
| 				}
 | |
| 				
 | |
| 				return default_pagesettings;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public Duplex Duplex
 | |
| 		{
 | |
| 			get { return this.duplex; }
 | |
| 			set { this.duplex = value; }
 | |
| 		}
 | |
| 		
 | |
| 		public int FromPage
 | |
| 		{
 | |
| 			get { return from_page; }
 | |
| 			set {
 | |
| 				if (value < 0)
 | |
| 					throw new ArgumentException ("The value of the FromPage property is less than zero");
 | |
| 				
 | |
| 				from_page = value;
 | |
| 			}
 | |
| 		}
 | |
| 		
 | |
| 		public static PrinterSettings.StringCollection InstalledPrinters
 | |
| 		{
 | |
| 			get { return SysPrn.GlobalService.InstalledPrinters; }
 | |
| 		}
 | |
| 	
 | |
| 		public bool IsDefaultPrinter
 | |
| 		{
 | |
| 			get { return (printer_name == printing_services.DefaultPrinter); }
 | |
| 		}
 | |
| 
 | |
| 		public bool IsPlotter
 | |
| 		{
 | |
| 			get { return is_plotter; }
 | |
| 		}
 | |
| 
 | |
| 		public bool IsValid
 | |
| 		{
 | |
| 			get { return printing_services.IsPrinterValid (this.printer_name); }
 | |
| 		}
 | |
| 		
 | |
| 		public int LandscapeAngle
 | |
| 		{
 | |
| 			get { return landscape_angle; }
 | |
| 		}
 | |
| 		
 | |
| 		public int MaximumCopies
 | |
| 		{
 | |
| 			get { return maximum_copies; }
 | |
| 		}
 | |
| 		
 | |
| 		public int MaximumPage
 | |
| 		{
 | |
| 			get { return maximum_page; }
 | |
| 			set {
 | |
| 				// This not documented but behaves like MinimumPage
 | |
| 				if (value < 0)
 | |
| 					throw new ArgumentException ("The value of the MaximumPage property is less than zero");
 | |
| 				
 | |
| 				maximum_page = value;
 | |
| 			}
 | |
| 		}
 | |
| 		
 | |
| 		public int MinimumPage
 | |
| 		{
 | |
| 			get { return minimum_page; }
 | |
| 			set {
 | |
| 				if (value < 0)
 | |
| 					throw new ArgumentException ("The value of the MaximumPage property is less than zero");
 | |
| 				
 | |
| 				minimum_page = value;
 | |
| 			}
 | |
| 		}
 | |
| 		
 | |
| 		public PrinterSettings.PaperSizeCollection PaperSizes
 | |
| 		{
 | |
| 			get {
 | |
| 				if (!this.IsValid)
 | |
| 					throw new InvalidPrinterException(this);
 | |
| 
 | |
| 				return paper_sizes;				
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public PrinterSettings.PaperSourceCollection PaperSources
 | |
| 		{
 | |
| 			get {
 | |
| 				if (!this.IsValid)
 | |
| 					throw new InvalidPrinterException(this);
 | |
| 
 | |
| 				return paper_sources;
 | |
| 			}
 | |
| 		}
 | |
| 		public
 | |
| 		string PrintFileName
 | |
| 		{
 | |
| 			get { return print_filename; }
 | |
| 			set { print_filename = value; }
 | |
| 		}
 | |
| 		public string PrinterName
 | |
| 		{
 | |
| 			get { return printer_name; }
 | |
| 			set { 
 | |
| 				if (printer_name == value)
 | |
| 					return;
 | |
| 					
 | |
| 				printer_name = value;
 | |
| 				printing_services.LoadPrinterSettings (printer_name, this);
 | |
| 			}
 | |
| 		}
 | |
| 		
 | |
| 		public PrinterSettings.PrinterResolutionCollection PrinterResolutions
 | |
| 		{
 | |
| 			get {
 | |
| 				if (!this.IsValid)
 | |
| 					throw new InvalidPrinterException(this);
 | |
| 					
 | |
| 				if (printer_resolutions == null) {
 | |
| 					printer_resolutions = new PrinterSettings.PrinterResolutionCollection (new PrinterResolution[] {});
 | |
| 					printing_services.LoadPrinterResolutions (printer_name, this);
 | |
| 				}
 | |
| 				
 | |
| 				return printer_resolutions;
 | |
| 			}
 | |
| 		}
 | |
| 		
 | |
| 		public PrintRange PrintRange
 | |
| 		{
 | |
| 			get { return print_range; }
 | |
| 			set { 
 | |
| 				if (value != PrintRange.AllPages && value != PrintRange.Selection &&
 | |
| 					value != PrintRange.SomePages)
 | |
| 					throw new InvalidEnumArgumentException ("The value of the PrintRange property is not one of the PrintRange values");
 | |
| 				
 | |
| 				print_range = value;
 | |
| 			}
 | |
| 		}
 | |
| 		
 | |
| 		public bool PrintToFile
 | |
| 		{
 | |
| 			get { return print_tofile; }
 | |
| 			set { print_tofile = value; }
 | |
| 		}
 | |
| 		
 | |
| 		public bool SupportsColor
 | |
| 		{
 | |
| 			get { return supports_color; }
 | |
| 		}
 | |
| 		
 | |
| 		public int ToPage
 | |
| 		{
 | |
| 			get { return to_page; }
 | |
| 			set {
 | |
| 				if (value < 0)
 | |
| 					throw new ArgumentException ("The value of the ToPage property is less than zero");
 | |
| 				
 | |
| 				to_page = value;
 | |
| 			}		
 | |
| 		}
 | |
| 		
 | |
| 		internal NameValueCollection PrinterCapabilities {
 | |
| 			get { 
 | |
| 				if (this.printer_capabilities == null)
 | |
| 					this.printer_capabilities = new NameValueCollection();
 | |
| 				return this.printer_capabilities;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		//methods		
 | |
| 		public object Clone ()
 | |
| 		{
 | |
| 			PrinterSettings ps = new PrinterSettings (printing_services);
 | |
| 			return ps;
 | |
| 		}
 | |
| 
 | |
| 		[MonoTODO("PrinterSettings.CreateMeasurementGraphics")]
 | |
| 		public Graphics CreateMeasurementGraphics()
 | |
| 		{
 | |
| 			throw new NotImplementedException();
 | |
| 		}
 | |
| 		[MonoTODO("PrinterSettings.CreateMeasurementGraphics")]
 | |
| 		public Graphics CreateMeasurementGraphics(bool honorOriginAtMargins)		
 | |
| 		{
 | |
| 			throw new NotImplementedException();
 | |
| 		}
 | |
| 		
 | |
| 		[MonoTODO("PrinterSettings.CreateMeasurementGraphics")]
 | |
| 		public Graphics CreateMeasurementGraphics(PageSettings pageSettings)		
 | |
| 		{
 | |
| 			throw new NotImplementedException();
 | |
| 		}
 | |
| 		
 | |
| 		[MonoTODO("PrinterSettings.CreateMeasurementGraphics")]
 | |
| 		public Graphics CreateMeasurementGraphics (PageSettings pageSettings, bool honorOriginAtMargins)		
 | |
| 		{
 | |
| 			throw new NotImplementedException();
 | |
| 		} 
 | |
| 
 | |
| 		[MonoTODO("PrinterSettings.GetHdevmode")]
 | |
| 		public IntPtr GetHdevmode()
 | |
| 		{
 | |
| 			throw new NotImplementedException();
 | |
| 		}
 | |
| 
 | |
| 		[MonoTODO("PrinterSettings.GetHdevmode")]
 | |
| 		public IntPtr GetHdevmode(PageSettings pageSettings)
 | |
| 		{
 | |
| 			throw new NotImplementedException();
 | |
| 		}
 | |
| 
 | |
| 		[MonoTODO("PrinterSettings.GetHdevname")]
 | |
| 		public IntPtr GetHdevnames()
 | |
| 		{
 | |
| 			throw new NotImplementedException();
 | |
| 		}
 | |
| 		
 | |
| 
 | |
| 		[MonoTODO("IsDirectPrintingSupported")]
 | |
| 		public bool IsDirectPrintingSupported (Image image)
 | |
| 		{
 | |
| 			throw new NotImplementedException();
 | |
| 		}
 | |
| 		
 | |
| 		[MonoTODO("IsDirectPrintingSupported")]
 | |
| 		public bool IsDirectPrintingSupported (ImageFormat imageFormat)
 | |
| 		{
 | |
| 			throw new NotImplementedException();
 | |
| 		}
 | |
| 
 | |
| 		[MonoTODO("PrinterSettings.SetHdevmode")]
 | |
| 		public void SetHdevmode(IntPtr hdevmode)
 | |
| 		{
 | |
| 			throw new NotImplementedException();
 | |
| 		}
 | |
| 
 | |
| 		[MonoTODO("PrinterSettings.SetHdevnames")]
 | |
| 		public void SetHdevnames(IntPtr hdevnames)
 | |
| 		{
 | |
| 			throw new NotImplementedException();
 | |
| 		}
 | |
| 		
 | |
| 		public override string ToString()
 | |
| 		{
 | |
| 			return "Printer [PrinterSettings " + printer_name + " Copies=" + copies +  " Collate=" + collate 
 | |
| 			+ " Duplex=" + can_duplex + " FromPage=" + from_page + " LandscapeAngle=" + landscape_angle 
 | |
| 			+ " MaximumCopies=" + maximum_copies + " OutputPort=" + " ToPage=" + to_page + "]";
 | |
| 
 | |
| 		}
 | |
| 		
 | |
| 		// Public subclasses
 | |
| 		#region Public Subclasses
 | |
| 		
 | |
| 
 | |
| 		public class PaperSourceCollection : ICollection, IEnumerable
 | |
| 		{
 | |
| 			ArrayList _PaperSources = new ArrayList();
 | |
| 			
 | |
| 			public PaperSourceCollection(PaperSource[] array) {
 | |
| 				foreach (PaperSource ps in array)
 | |
| 					_PaperSources.Add(ps);
 | |
| 			}
 | |
| 			
 | |
| 			public int Count { get { return _PaperSources.Count; } }
 | |
| 			int ICollection.Count { get { return _PaperSources.Count; } }
 | |
| 			bool ICollection.IsSynchronized { get { return false; } }
 | |
| 			object ICollection.SyncRoot { get { return this; } }			
 | |
| 			[EditorBrowsable(EditorBrowsableState.Never)]
 | |
|       			public int Add (PaperSource paperSource) {return _PaperSources.Add (paperSource); }
 | |
| 			public void CopyTo (PaperSource[] paperSources, int index)  {throw new NotImplementedException (); }
 | |
| 			
 | |
| 			public virtual PaperSource this[int index] {
 | |
| 				get { return _PaperSources[index] as PaperSource; }
 | |
| 			}
 | |
| 			
 | |
| 			IEnumerator IEnumerable.GetEnumerator()
 | |
| 			{
 | |
| 				return _PaperSources.GetEnumerator();
 | |
| 			}
 | |
| 			
 | |
| 			public IEnumerator GetEnumerator()
 | |
| 			{
 | |
| 				return _PaperSources.GetEnumerator();
 | |
| 			}
 | |
| 			
 | |
| 			void ICollection.CopyTo(Array array, int index)
 | |
| 			{
 | |
| 				_PaperSources.CopyTo(array, index);
 | |
| 			}
 | |
| 			
 | |
| 			internal void Clear ()
 | |
| 			{ 
 | |
| 				_PaperSources.Clear (); 
 | |
| 			}
 | |
| 			
 | |
| 		}
 | |
| 
 | |
| 		public class PaperSizeCollection : ICollection, IEnumerable
 | |
| 		{
 | |
| 			ArrayList _PaperSizes = new ArrayList();
 | |
| 			
 | |
| 			public PaperSizeCollection(PaperSize[] array) {
 | |
| 				foreach (PaperSize ps in array)
 | |
| 					_PaperSizes.Add(ps);
 | |
| 			}
 | |
| 			
 | |
| 			public int Count { get { return _PaperSizes.Count; } }
 | |
| 			int ICollection.Count { get { return _PaperSizes.Count; } }
 | |
| 			bool ICollection.IsSynchronized { get { return false; } }
 | |
| 			object ICollection.SyncRoot { get { return this; } }			
 | |
| 			[EditorBrowsable(EditorBrowsableState.Never)]
 | |
| 			public int Add (PaperSize paperSize) {return _PaperSizes.Add (paperSize); }	
 | |
| 			public void CopyTo (PaperSize[] paperSizes, int index) {throw new NotImplementedException (); }			
 | |
| 			
 | |
| 			public virtual PaperSize this[int index] {
 | |
| 				get { return _PaperSizes[index] as PaperSize; }
 | |
| 			}
 | |
| 			
 | |
| 			IEnumerator IEnumerable.GetEnumerator()
 | |
| 			{
 | |
| 				return _PaperSizes.GetEnumerator();
 | |
| 			}
 | |
| 			
 | |
| 			public IEnumerator GetEnumerator()
 | |
| 			{
 | |
| 				return _PaperSizes.GetEnumerator();
 | |
| 			}
 | |
| 			
 | |
| 			void ICollection.CopyTo(Array array, int index)
 | |
| 			{
 | |
| 				_PaperSizes.CopyTo(array, index);
 | |
| 			}
 | |
| 			
 | |
| 			internal void Clear ()
 | |
| 			{ 
 | |
| 				_PaperSizes.Clear (); 
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public class PrinterResolutionCollection : ICollection, IEnumerable
 | |
| 		{
 | |
| 			ArrayList _PrinterResolutions = new ArrayList();
 | |
| 			
 | |
| 			public PrinterResolutionCollection(PrinterResolution[] array) {
 | |
| 				foreach (PrinterResolution pr in array)
 | |
| 					_PrinterResolutions.Add(pr);
 | |
| 			}
 | |
| 			
 | |
| 			public int Count { get { return _PrinterResolutions.Count; } }
 | |
| 			int ICollection.Count { get { return _PrinterResolutions.Count; } }
 | |
| 			bool ICollection.IsSynchronized { get { return false; } }
 | |
| 			object ICollection.SyncRoot { get { return this; } }			
 | |
| 			[EditorBrowsable(EditorBrowsableState.Never)]
 | |
| 			public int Add (PrinterResolution printerResolution) { return _PrinterResolutions.Add (printerResolution); }
 | |
| 			public void CopyTo (PrinterResolution[] printerResolutions, int index) {throw new NotImplementedException (); }
 | |
| 						
 | |
| 			public virtual PrinterResolution this[int index] {
 | |
| 				get { return _PrinterResolutions[index] as PrinterResolution; }
 | |
| 			}
 | |
| 			
 | |
| 			IEnumerator IEnumerable.GetEnumerator()
 | |
| 			{
 | |
| 				return _PrinterResolutions.GetEnumerator();
 | |
| 			}
 | |
| 			
 | |
| 			public IEnumerator GetEnumerator()
 | |
| 			{
 | |
| 				return _PrinterResolutions.GetEnumerator();
 | |
| 			}
 | |
| 			
 | |
| 			void ICollection.CopyTo(Array array, int index)
 | |
| 			{
 | |
| 				_PrinterResolutions.CopyTo(array, index);
 | |
| 			}
 | |
| 			
 | |
| 			internal void Clear ()
 | |
| 			{ 
 | |
| 				_PrinterResolutions.Clear (); 
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public class StringCollection : ICollection, IEnumerable
 | |
| 		{
 | |
| 			ArrayList _Strings = new ArrayList();
 | |
| 			
 | |
| 			public StringCollection(string[] array) {
 | |
| 				foreach (string s in array)
 | |
| 					_Strings.Add(s);
 | |
| 			}
 | |
| 			
 | |
| 			public int Count { get { return _Strings.Count; } }
 | |
| 			int ICollection.Count { get { return _Strings.Count; } }
 | |
| 			bool ICollection.IsSynchronized { get { return false; } }
 | |
| 			object ICollection.SyncRoot { get { return this; } }
 | |
| 						
 | |
| 			public virtual string this[int index] {
 | |
| 				get { return _Strings[index] as string; }
 | |
| 			}
 | |
| 			[EditorBrowsable(EditorBrowsableState.Never)]
 | |
|       			public int Add (string value) { return _Strings.Add (value); }
 | |
|       			public void CopyTo (string[] strings, int index) {throw new NotImplementedException (); }      			
 | |
| 
 | |
| 			IEnumerator IEnumerable.GetEnumerator()
 | |
| 			{
 | |
| 				return _Strings.GetEnumerator();
 | |
| 			}
 | |
| 			
 | |
| 			public IEnumerator GetEnumerator()
 | |
| 			{
 | |
| 				return _Strings.GetEnumerator();
 | |
| 			}
 | |
| 			
 | |
| 			void ICollection.CopyTo(Array array, int index)
 | |
| 			{
 | |
| 				_Strings.CopyTo(array, index);
 | |
| 			}			
 | |
| 		}
 | |
| 		
 | |
| 		#endregion
 | |
| /*
 | |
| 		void GetPrintDialogInfo (string printer_name, ref string port, ref string type, ref string status, ref string comment)
 | |
| 		{
 | |
| 			printing_services.GetPrintDialogInfo (printer_name, ref port, ref type, ref status, ref comment);
 | |
| 		}
 | |
| */
 | |
| 	}
 | |
| }
 |