X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FManaged.Windows.Forms%2FSystem.Windows.Forms%2FPrintDialog.cs;h=2c48f8f35b33a3194a6c429cbb7949f936af4dc1;hb=1f18adb5c4ed1e53f8e9572ea6434dabb8b40753;hp=f08fff1346a11c97e3912ea5985fd4e9b1c7a015;hpb=af90548a08ef5effc93b083b7eec44daa178b141;p=mono.git diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/PrintDialog.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/PrintDialog.cs index f08fff1346a..2c48f8f35b3 100644 --- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/PrintDialog.cs +++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/PrintDialog.cs @@ -37,10 +37,16 @@ using System.Reflection; 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; @@ -69,9 +75,14 @@ namespace System.Windows.Forms 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; @@ -92,6 +103,7 @@ namespace System.Windows.Forms } #if NET_2_0 + [DefaultValue (false)] public bool AllowCurrentPage { get { return allow_current_page; @@ -142,9 +154,9 @@ namespace System.Windows.Forms 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 (); } } } @@ -157,7 +169,7 @@ namespace System.Windows.Forms set { document = value; - current_settings = value == null ? new PrinterSettings () : value.PrinterSettings; + current_settings = (value == null) ? new PrinterSettings () : value.PrinterSettings; } } @@ -166,6 +178,10 @@ namespace System.Windows.Forms [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public PrinterSettings PrinterSettings { get { +#if NET_2_0 + if (current_settings == null) + current_settings = new PrinterSettings (); +#endif return current_settings; } @@ -173,7 +189,7 @@ namespace System.Windows.Forms if (value != null && value == current_settings) return; - current_settings = value == null ? new PrinterSettings () : value; + current_settings = (value == null) ? new PrinterSettings () : value; document = null; } } @@ -212,25 +228,39 @@ namespace System.Windows.Forms } } - 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) { @@ -284,48 +314,48 @@ namespace System.Windows.Forms 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; } } @@ -500,27 +530,35 @@ namespace System.Windows.Forms 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 @@ -562,10 +600,10 @@ namespace System.Windows.Forms 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 () { @@ -603,5 +641,94 @@ namespace System.Windows.Forms 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; + } + } + } } }