**** Merged from MCS ****
[mono-project.git] / mcs / class / System.Drawing / System.Drawing.Printing / PrintDocument.cs
blob9142aedbfbdaf8de2d7549c9bc54f4237c21888e
1 //
2 // System.Drawing.PrintDocument.cs
3 //
4 // Authors:
5 // Dennis Hayes (dennish@Raytek.com)
6 // Herve Poussineau (hpoussineau@fr.st)
7 // Andreas Nahr (ClassDevelopment@A-SoftTech.com)
8 //
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:
22 //
23 // The above copyright notice and this permission notice shall be
24 // included in all copies or substantial portions of the Software.
25 //
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.
35 using System;
36 using System.ComponentModel;
38 namespace System.Drawing.Printing
40 [DefaultEvent ("PrintPage"), DefaultProperty ("DocumentName")]
41 [ToolboxItemFilter ("System.Drawing.Printing", ToolboxItemFilterType.Allow)]
42 public class PrintDocument : System.ComponentModel.Component
44 private PageSettings defaultpagesettings;
45 private PrinterSettings printersettings;
46 private PrintController printcontroller;
47 private string documentname;
48 #if !(NET_1_0)
49 private bool originAtMargins = false; // .NET V1.1 Beta
50 #endif
52 public PrintDocument() {
53 documentname = "document"; //offical default.
54 defaultpagesettings = new PageSettings(); // use default values of default printer
55 printersettings = new PrinterSettings(); // use default values
56 printcontroller = new StandardPrintController();
59 // properties
60 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
61 [Browsable (false)]
62 [SRDescription ("The settings for the current page.")]
63 public PageSettings DefaultPageSettings{
64 get{
65 return defaultpagesettings;
67 set{
68 defaultpagesettings = value;
72 // Name of the document, not the file!
73 [DefaultValue ("document")]
74 [SRDescription ("The name of the document.")]
75 public string DocumentName{
76 get{
77 return documentname;
79 set{
80 documentname = value;
84 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
85 [Browsable (false)]
86 [SRDescription ("The print controller object.")]
87 public PrintController PrintController{
88 get{
89 return printcontroller;
91 set{
92 printcontroller = value;
96 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
97 [Browsable (false)]
98 [SRDescription ("The current settings for the active printer.")]
99 public PrinterSettings PrinterSettings{
100 get{
101 return printersettings;
103 set{
104 printersettings = value;
108 #if !(NET_1_0)
109 [DefaultValue (false)]
110 [SRDescription ("Determines if the origin is set at the specified margins.")]
111 public bool OriginAtMargins{
112 get{
113 return originAtMargins;
115 set{
116 originAtMargins = value;
119 #endif
121 // methods
122 public void Print(){
123 PrintEventArgs printArgs = new PrintEventArgs();
124 this.OnBeginPrint(printArgs);
125 if (printArgs.Cancel)
126 return;
127 PrintController.OnStartPrint(this, printArgs);
128 if (printArgs.Cancel)
129 return;
131 // while there is more pages
132 PrintPageEventArgs printPageArgs;
135 PageSettings pageSettings = DefaultPageSettings.Clone() as PageSettings;
136 this.OnQueryPageSettings(new QueryPageSettingsEventArgs(pageSettings));
138 printPageArgs = new PrintPageEventArgs(
139 null,
140 pageSettings.Bounds,
141 new Rectangle(0, 0, pageSettings.PaperSize.Width, pageSettings.PaperSize.Height),
142 pageSettings);
143 Graphics g = PrintController.OnStartPage(this, printPageArgs);
144 // assign Graphics in printPageArgs
145 printPageArgs.SetGraphics(g);
147 if (!printPageArgs.Cancel)
148 this.OnPrintPage(printPageArgs);
150 PrintController.OnEndPage(this, printPageArgs);
151 if (printPageArgs.Cancel)
152 break;
153 } while (printPageArgs.HasMorePages);
155 this.OnEndPrint(printArgs);
156 PrintController.OnEndPrint(this, printArgs);
159 public override string ToString(){
160 return "[PrintDocument " + this.DocumentName + "]";
163 // events
164 protected virtual void OnBeginPrint(PrintEventArgs e){
165 //fire the event
166 if (BeginPrint != null)
167 BeginPrint(this, e);
170 protected virtual void OnEndPrint(PrintEventArgs e){
171 //fire the event
172 if (EndPrint != null)
173 EndPrint(this, e);
176 protected virtual void OnPrintPage(PrintPageEventArgs e){
177 //fire the event
178 if (PrintPage != null)
179 PrintPage(this, e);
182 protected virtual void OnQueryPageSettings(QueryPageSettingsEventArgs e){
183 //fire the event
184 if (QueryPageSettings != null)
185 QueryPageSettings(this, e);
188 [SRDescription ("Raised when printing begins")]
189 public event PrintEventHandler BeginPrint;
191 [SRDescription ("Raised when printing ends")]
192 public event PrintEventHandler EndPrint;
194 [SRDescription ("Raised when printing of a new page begins")]
195 public event PrintPageEventHandler PrintPage;
197 [SRDescription ("Raised before printing of a new page begins")]
198 public event QueryPageSettingsEventHandler QueryPageSettings;