namespace System.Windows.Forms
{
+#if NET_2_0
+ [Designer ("System.Windows.Forms.Design.PrintDialogDesigner, " + Consts.AssemblySystem_Design,
+ "System.ComponentModel.Design.IDesigner")]
+#endif
[DefaultProperty("Document")]
public sealed class PrintDialog : CommonDialog {
PrintDocument document;
+#if NET_2_0
bool allow_current_page;
+#endif
bool allow_print_to_file;
bool allow_selection;
bool allow_some_pages;
private Label label_type;
private Label label_where;
private Label label_comment;
+ private CollatePreview collate;
+#if NET_2_0
+ private bool use_ex_dialog;
+#endif
public PrintDialog ()
{
+ form = new DialogForm (this);
help_button = null;
installed_printers = System.Drawing.Printing.PrinterSettings.InstalledPrinters;
public override void Reset ()
{
- current_settings = new PrinterSettings ();
+ current_settings = null;
AllowPrintToFile = true;
AllowSelection = false;
AllowSomePages = false;
}
#if NET_2_0
+ [DefaultValue (false)]
public bool AllowCurrentPage {
get {
return allow_current_page;
labelTo.Enabled = value;
labelFrom.Enabled = value;
- if (current_settings != null) {
- txtFrom.Text = current_settings.FromPage.ToString ();
- txtTo.Text = current_settings.ToPage.ToString ();
+ if (PrinterSettings != null) {
+ txtFrom.Text = PrinterSettings.FromPage.ToString ();
+ txtTo.Text = PrinterSettings.ToPage.ToString ();
}
}
}
set {
document = value;
- current_settings = value == null ? new PrinterSettings () : value.PrinterSettings;
+ current_settings = (value == null) ? new PrinterSettings () : value.PrinterSettings;
}
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public PrinterSettings PrinterSettings {
get {
+#if NET_2_0
+ if (current_settings == null)
+ current_settings = new PrinterSettings ();
+#endif
return current_settings;
}
if (value != null && value == current_settings)
return;
- current_settings = value == null ? new PrinterSettings () : value;
+ current_settings = (value == null) ? new PrinterSettings () : value;
document = null;
}
}
}
}
- protected override bool RunDialog (IntPtr hwnd)
+#if NET_2_0
+ [MonoTODO ("Stub, not implemented")]
+ [DefaultValue (false)]
+ public bool UseEXDialog {
+ get { return use_ex_dialog; }
+ set { use_ex_dialog = value; }
+ }
+#endif
+
+ protected override bool RunDialog (IntPtr hwndOwner)
{
- if (allow_some_pages && current_settings.FromPage > current_settings.ToPage)
+#if ONLY_1_1
+ if (PrinterSettings == null)
+ throw new ArgumentException ("PrintDialog needs a PrinterSettings object to display.");
+#endif
+
+ if (allow_some_pages && PrinterSettings.FromPage > PrinterSettings.ToPage)
throw new ArgumentException ("FromPage out of range");
if (allow_some_pages) {
- txtFrom.Text = current_settings.FromPage.ToString ();
- txtTo.Text = current_settings.ToPage.ToString ();
+ txtFrom.Text = PrinterSettings.FromPage.ToString ();
+ txtTo.Text = PrinterSettings.ToPage.ToString ();
}
- if (current_settings.PrintRange == PrintRange.SomePages && allow_some_pages)
+ if (PrinterSettings.PrintRange == PrintRange.SomePages && allow_some_pages)
radio_pages.Checked = true;
- else if (current_settings.PrintRange == PrintRange.Selection && allow_selection)
+ else if (PrinterSettings.PrintRange == PrintRange.Selection && allow_selection)
radio_sel.Checked = true;
else
radio_all.Checked = true;
- updown_copies.Value = current_settings.Copies == 0 ? 1 : (int) current_settings.Copies;
- chkbox_collate.Checked = current_settings.Collate;
+ updown_copies.Value = PrinterSettings.Copies == 0 ? 1 : (int) PrinterSettings.Copies;
+ chkbox_collate.Checked = PrinterSettings.Collate;
chkbox_collate.Enabled = (updown_copies.Value > 1) ? true : false;
if (show_help) {
ShowErrorMessage ("'From' value cannot be greater than 'To' value.", txtFrom);
return;
}
-
- if (to < current_settings.MinimumPage || to > current_settings.MaximumPage) {
+
+ if (to < PrinterSettings.MinimumPage || to > PrinterSettings.MaximumPage) {
ShowErrorMessage ("'To' value is not within the page range\n" +
- "Enter a number between " + current_settings.MinimumPage +
- " and " + current_settings.MaximumPage + ".", txtTo);
+ "Enter a number between " + PrinterSettings.MinimumPage +
+ " and " + PrinterSettings.MaximumPage + ".", txtTo);
return;
}
-
- if (from < current_settings.MinimumPage || from > current_settings.MaximumPage) {
+
+ if (from < PrinterSettings.MinimumPage || from > PrinterSettings.MaximumPage) {
ShowErrorMessage ("'From' value is not within the page range\n" +
- "Enter a number between " + current_settings.MinimumPage +
- " and " + current_settings.MaximumPage + ".", txtFrom);
+ "Enter a number between " + PrinterSettings.MinimumPage +
+ " and " + PrinterSettings.MaximumPage + ".", txtFrom);
return;
}
}
if (radio_all.Checked == true)
- current_settings.PrintRange = PrintRange.AllPages;
+ PrinterSettings.PrintRange = PrintRange.AllPages;
else if (radio_pages.Checked == true)
- current_settings.PrintRange = PrintRange.SomePages;
+ PrinterSettings.PrintRange = PrintRange.SomePages;
else
- current_settings.PrintRange = PrintRange.Selection;
+ PrinterSettings.PrintRange = PrintRange.Selection;
- current_settings.Copies = (short) updown_copies.Value;
- if (current_settings.PrintRange == PrintRange.SomePages) {
- current_settings.FromPage = from;
- current_settings.ToPage = to;
+ PrinterSettings.Copies = (short) updown_copies.Value;
+ if (PrinterSettings.PrintRange == PrintRange.SomePages) {
+ PrinterSettings.FromPage = from;
+ PrinterSettings.ToPage = to;
}
- current_settings.Collate = chkbox_collate.Checked;
+ PrinterSettings.Collate = chkbox_collate.Checked;
if (allow_print_to_file) {
- current_settings.PrintToFile = chkbox_print.Checked;
+ PrinterSettings.PrintToFile = chkbox_print.Checked;
}
form.DialogResult = DialogResult.OK;
if (printer_combo.SelectedItem != null)
- current_settings.PrinterName = (string) printer_combo.SelectedItem;
+ PrinterSettings.PrinterName = (string) printer_combo.SelectedItem;
if (document != null) {
document.PrintController = new PrintControllerWithStatusDialog (document.PrintController);
- document.PrinterSettings = current_settings;
+ document.PrinterSettings = PrinterSettings;
}
}
label.AutoSize = true;
label.Location = new Point (20, 100);
group_box_prn.Controls.Add (label);
+
+ label_where = new Label ();
+ label_where.AutoSize = true;
+ label_where.Location = new Point (80, 100);
+ group_box_prn.Controls.Add (label_where);
label = new Label ();
label.Text = "Comment:";
label_comment = new Label ();
label_comment.AutoSize = true;
label_comment.Location = new Point (80, 120);
+ group_box_prn.Controls.Add (label_comment);
radio_all = new RadioButton ();
radio_all.TabIndex = 21;
chkbox_print.Location = new Point (305, 115);
chkbox_print.Text = "Print to fil&e";
- label = new Label ();
- label.Text = "Number of &copies:";
- label.AutoSize = true;
- label.Location = new Point (20, 20);
- group_box_copies.Controls.Add (label);
updown_copies = new NumericUpDown ();
updown_copies.TabIndex = 31;
- updown_copies.Location = new Point (120, 20);
+ updown_copies.Location = new Point (105, 18);
updown_copies.Minimum = 1;
group_box_copies.Controls.Add (updown_copies);
updown_copies.ValueChanged += new System.EventHandler (OnUpDownValueChanged);
updown_copies.Size = new System.Drawing.Size (40, 20);
+ label = new Label ();
+ label.Text = "Number of &copies:";
+ label.AutoSize = true;
+ label.Location = new Point (10, 20);
+ group_box_copies.Controls.Add (label);
+
chkbox_collate = new CheckBox ();
chkbox_collate.TabIndex = 32;
- chkbox_collate.Location = new Point (20, 40);
+ chkbox_collate.Location = new Point (105, 55);
chkbox_collate.Text = "C&ollate";
- chkbox_collate.Width = 80;
+ chkbox_collate.Width = 58;
+ chkbox_collate.CheckedChanged += new EventHandler(chkbox_collate_CheckedChanged);
+
group_box_copies.Controls.Add (chkbox_collate);
+ collate = new CollatePreview ();
+ collate.Location = new Point (6, 50);
+ collate.Size = new Size (100, 45);
+ group_box_copies.Controls.Add (collate);
+
// Printer combo
radio_pages.Checked = true;
}
- private void OnPrinterSelectedIndexChanged (object sender, System.EventArgs e)
- {
- SetPrinterDetails ();
- }
+ private void OnPrinterSelectedIndexChanged (object sender, System.EventArgs e)
+ {
+ SetPrinterDetails ();
+ }
private void SetPrinterDetails ()
{
label_where.Text = port;
label_comment.Text = comment;
+ accept_button.Enabled = true;
}
catch {
+ accept_button.Enabled = false;
+ }
+ }
+
+ private void chkbox_collate_CheckedChanged(object sender, EventArgs e) {
+ collate.Collate = chkbox_collate.Checked;
+ }
+
+ class CollatePreview : UserControl
+ {
+ private bool collate;
+ public bool Collate {
+ get { return collate;}
+ set { if (collate != value) {
+ collate = value;
+ Invalidate();
+ }
+ }
+ }
+
+ new Font font;
+
+ public CollatePreview ()
+ {
+ font = new Font(FontFamily.GenericSansSerif, 10);
+ }
+
+ protected override void OnPaint(PaintEventArgs e)
+ {
+ if (collate)
+ DrawCollate (e.Graphics);
+ else
+ DrawNoCollate (e.Graphics);
+
+ base.OnPaint (e);
+ }
+
+ void DrawCollate (Graphics g)
+ {
+ int x1 = 0;
+ int y1 = 12;
+
+ int x2 = 14;
+ int y2 = 6;
+
+ int x3 = 26;
+ int y3 = 0;
+
+ for (int i = 0; i < 2; i++) {
+
+ g.FillRectangle (Brushes.White, x3 + (i*18), y3, 18, 24);
+ ControlPaint.DrawBorder (g, new Rectangle (x3 + (i*18), y3, 18, 24), SystemColors.ControlDark, ButtonBorderStyle.Solid);
+ g.DrawString ((i+1).ToString(), font, SystemBrushes.ControlDarkDark, x3 + (i*18) + 5, y3 + 5, StringFormat.GenericTypographic);
+
+ g.FillRectangle (Brushes.White, x2 + (i*18), y2, 18, 24);
+ ControlPaint.DrawBorder (g, new Rectangle (x2 + (i*18), y2, 18, 24), SystemColors.ControlDark, ButtonBorderStyle.Solid);
+ g.DrawString ((i+1).ToString(), font, SystemBrushes.ControlDarkDark, x2 + (i*18) + 5, y2 + 5, StringFormat.GenericTypographic);
+
+ g.FillRectangle (Brushes.White, x1 + (i*18), y1, 18, 24);
+ ControlPaint.DrawBorder (g, new Rectangle (x1 + (i*18), y1, 18, 24), SystemColors.ControlDark, ButtonBorderStyle.Solid);
+ g.DrawString ((i+1).ToString(), font, SystemBrushes.ControlDarkDark, x1 + (i*18) + 5, y1 + 5, StringFormat.GenericTypographic);
+
+
+ x1 += 28;
+ x2 += 28;
+ x3 += 28;
+ }
+ }
+
+ void DrawNoCollate (Graphics g)
+ {
+ int x1 = 0;
+ int y1 = 12;
+
+ int x2 = 13;
+ int y2 = 4;
+
+ for (int i = 0; i < 3; i++) {
+
+ g.FillRectangle (Brushes.White, x2 + (i*18), y2, 18, 24);
+ ControlPaint.DrawBorder (g, new Rectangle (x2 + (i*18), y2, 18, 24), SystemColors.ControlDark, ButtonBorderStyle.Solid);
+ g.DrawString ((i+1).ToString(), font, SystemBrushes.ControlDarkDark, x2 + (i*18) + 5, y2 + 5, StringFormat.GenericTypographic);
+
+ g.FillRectangle (Brushes.White, x1 + (i*18), y1, 18, 24);
+ ControlPaint.DrawBorder (g, new Rectangle (x1 + (i*18), y1, 18, 24), SystemColors.ControlDark, ButtonBorderStyle.Solid);
+ g.DrawString ((i+1).ToString(), font, SystemBrushes.ControlDarkDark, x1 + (i*18) + 5, y1 + 5, StringFormat.GenericTypographic);
+
+ x1 += 15;
+ x2 += 15;
+ }
}
}
}