2 // System.Drawing.PageSettings.cs
5 // Dennis Hayes (dennish@Raytek.com)
6 // Herve Poussineau (hpoussineau@fr.st)
7 // Andreas Nahr (ClassDevelopment@A-SoftTech.com)
9 // (C) 2002 Ximian, Inc
13 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
15 // Permission is hereby granted, free of charge, to any person obtaining
16 // a copy of this software and associated documentation files (the
17 // "Software"), to deal in the Software without restriction, including
18 // without limitation the rights to use, copy, modify, merge, publish,
19 // distribute, sublicense, and/or sell copies of the Software, and to
20 // permit persons to whom the Software is furnished to do so, subject to
21 // the following conditions:
23 // The above copyright notice and this permission notice shall be
24 // included in all copies or substantial portions of the Software.
26 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
30 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
31 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
32 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
36 using System
.Runtime
.InteropServices
;
38 namespace System
.Drawing
.Printing
45 public class PageSettings
: ICloneable
48 internal bool landscape
;
49 internal PaperSize paperSize
;
50 internal PaperSource paperSource
;
51 internal PrinterResolution printerResolution
;
53 // create a new default Margins object (is 1 inch for all margins)
54 Margins margins
= new Margins();
59 RectangleF printableArea
;
61 PrinterSettings printerSettings
;
63 public PageSettings() : this(new PrinterSettings())
67 public PageSettings(PrinterSettings printerSettings
)
69 PrinterSettings
= printerSettings
;
71 this.color
= printerSettings
.DefaultPageSettings
.color
;
72 this.landscape
= printerSettings
.DefaultPageSettings
.landscape
;
73 this.paperSize
= printerSettings
.DefaultPageSettings
.paperSize
;
74 this.paperSource
= printerSettings
.DefaultPageSettings
.paperSource
;
75 this.printerResolution
= printerSettings
.DefaultPageSettings
.printerResolution
;
78 // used by PrinterSettings.DefaultPageSettings
79 internal PageSettings(PrinterSettings printerSettings
, bool color
, bool landscape
, PaperSize paperSize
, PaperSource paperSource
, PrinterResolution printerResolution
)
81 PrinterSettings
= printerSettings
;
83 this.landscape
= landscape
;
84 this.paperSize
= paperSize
;
85 this.paperSource
= paperSource
;
86 this.printerResolution
= printerResolution
;
90 public Rectangle Bounds
{
92 int width
= this.paperSize
.Width
;
93 int height
= this.paperSize
.Height
;
95 width
-= this.margins
.Left
+ this.margins
.Right
;
96 height
-= this.margins
.Top
+ this.margins
.Bottom
;
99 // swap width and height
104 return new Rectangle (this.margins
.Left
, this.margins
.Top
, width
, height
);
110 if (!this.printerSettings
.IsValid
)
111 throw new InvalidPrinterException(this.printerSettings
);
119 public bool Landscape
{
121 if (!this.printerSettings
.IsValid
)
122 throw new InvalidPrinterException(this.printerSettings
);
130 public Margins Margins
{
132 if (!this.printerSettings
.IsValid
)
133 throw new InvalidPrinterException(this.printerSettings
);
141 public PaperSize PaperSize
{
143 if (!this.printerSettings
.IsValid
)
144 throw new InvalidPrinterException(this.printerSettings
);
153 public PaperSource PaperSource
{
155 if (!this.printerSettings
.IsValid
)
156 throw new InvalidPrinterException(this.printerSettings
);
165 public PrinterResolution PrinterResolution
{
167 if (!this.printerSettings
.IsValid
)
168 throw new InvalidPrinterException(this.printerSettings
);
169 return printerResolution
;
173 printerResolution
= value;
177 public PrinterSettings PrinterSettings
{
179 return printerSettings
;
182 printerSettings
= value;
186 public float HardMarginX
{
192 public float HardMarginY
{
198 public RectangleF PrintableArea
{
200 return printableArea
;
206 public object Clone ()
209 PrinterResolution pres
= new PrinterResolution (this.printerResolution
.X
, this.printerResolution
.Y
, this.printerResolution
.Kind
);
210 PaperSource psource
= new PaperSource (this.paperSource
.SourceName
, this.paperSource
.Kind
);
211 PaperSize psize
= new PaperSize (this.paperSize
.PaperName
, this.paperSize
.Width
, this.paperSize
.Height
);
212 psize
.SetKind (this.paperSize
.Kind
);
214 PageSettings ps
= new PageSettings (this.printerSettings
, this.color
, this.landscape
,
215 psize
, psource
, pres
);
216 ps
.Margins
= (Margins
) this.margins
.Clone ();
221 [MonoTODO("PageSettings.CopyToHdevmode")]
222 public void CopyToHdevmode (IntPtr hdevmode
){
223 throw new NotImplementedException ();
227 [MonoTODO("PageSettings.SetHdevmode")]
228 public void SetHdevmode (IntPtr hdevmode
){
229 throw new NotImplementedException ();
232 public override string ToString(){
233 string ret
= "[PageSettings: Color={0}";
234 ret
+= ", Landscape={1}";
235 ret
+= ", Margins={2}";
236 ret
+= ", PaperSize={3}";
237 ret
+= ", PaperSource={4}";
238 ret
+= ", PrinterResolution={5}";
241 return String
.Format(ret
, this.color
, this.landscape
, this.margins
, this.paperSize
, this.paperSource
, this.printerResolution
);