123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421 |
- using System;
- using System.Drawing;
- using System.Windows.Forms;
- using System.Drawing.Printing;
- using FastReport.Utils;
- namespace FastReport.Forms
- {
- internal partial class PrinterSetupForm : BaseDialogForm
- {
- private Report report;
- private bool printDialog;
- private bool collapsed;
- private PrinterSettings printerSettings;
- private bool Collapsed
- {
- get { return collapsed; }
- set
- {
- collapsed = value;
- if (value)
- {
- gbOther.Visible = false;
- gbPrintMode.Visible = false;
- btnMoreOptions.Text = Res.Get("Buttons,MoreOptions");
- btnOk.Top = gbPageRange.Bottom + (int)(15);
- btnCancel.Top = btnOk.Top;
- btnMoreOptions.Top = btnOk.Top;
- }
- else
- {
- gbOther.Visible = true;
- gbPrintMode.Visible = true;
- btnMoreOptions.Text = Res.Get("Buttons,LessOptions");
- btnOk.Top = gbOther.Bottom + (int)(15);
- btnCancel.Top = btnOk.Top;
- btnMoreOptions.Top = btnOk.Top;
- }
- ClientSize = new Size(ClientSize.Width, btnOk.Bottom + (int)(10));
- }
- }
- public Report Report
- {
- get { return report; }
- set
- {
- report = value;
- UpdateControls();
- }
- }
- public bool PrintDialog
- {
- get { return printDialog; }
- set
- {
- printDialog = value;
- if (value)
- {
- MyRes res = new MyRes("Forms,PrinterSetup");
- Text = res.Get("");
- cbSavePrinter.Visible = false;
- rbCurrent.Enabled = true;
- btnOk.Text = res.Get("Print");
- }
- }
- }
- public PrinterSettings PrinterSettings
- {
- get { return printerSettings; }
- set { printerSettings = value; }
- }
- private bool Equal(float a, float b)
- {
- return Math.Abs(a - b) < 2;
- }
- private bool PaperSizeEqual(PaperSize ps, float width, float height, int rawKind)
- {
- float psWidth = ps.Width / 100f * 25.4f;
- float psHeight = ps.Height / 100f * 25.4f;
- bool sizeEqual = (Equal(psWidth, width) && Equal(psHeight, height)) ||
- (Equal(psWidth, height) && Equal(psHeight, width));
- if (rawKind == 0)
- return sizeEqual;
- return sizeEqual && ps.RawKind == rawKind;
- }
- private void UpdateControls()
- {
- MyRes res = new MyRes("Forms,PrinterSetup");
- // Printer
- string savePrinter = printerSettings.PrinterName;
- printerSettings.PrinterName = Report.PrintSettings.Printer;
- if (!printerSettings.IsValid)
- printerSettings.PrinterName = savePrinter;
- try
- {
- foreach (string printer in PrinterSettings.InstalledPrinters)
- {
- cbxPrinter.Items.Add(printer);
- }
- }
- catch (System.ComponentModel.Win32Exception) { }
- cbxPrinter.SelectedItem = printerSettings.PrinterName;
- cbSavePrinter.Checked = Report.PrintSettings.SavePrinterWithReport;
- cbPrintToFile.Checked = Report.PrintSettings.PrintToFile;
- // Page range
- rbAll.Checked = Report.PrintSettings.PageRange == PageRange.All;
- rbCurrent.Checked = Report.PrintSettings.PageRange == PageRange.Current;
- rbNumbers.Checked = Report.PrintSettings.PageRange == PageRange.PageNumbers;
- tbNumbers.Text = Report.PrintSettings.PageNumbers;
- // Copies
- udCount.Value = Report.PrintSettings.Copies;
- cbCollate.Checked = Report.PrintSettings.Collate;
- // Other
- cbxOddEven.Items.Add(res.Get("AllPages"));
- cbxOddEven.Items.Add(res.Get("OddPages"));
- cbxOddEven.Items.Add(res.Get("EvenPages"));
- cbxOddEven.SelectedIndex = (int)Report.PrintSettings.PrintPages;
- cbxOrder.Items.Add(res.Get("OrderDirect"));
- cbxOrder.Items.Add(res.Get("OrderReverse"));
- cbxOrder.SelectedIndex = Report.PrintSettings.Reverse ? 1 : 0;
- cbxDuplex.Items.Add(Res.Get("Forms,PageSetup,DupDefault"));
- cbxDuplex.Items.Add(Res.Get("Forms,PageSetup,DupSimplex"));
- cbxDuplex.Items.Add(Res.Get("Forms,PageSetup,DupVertical"));
- cbxDuplex.Items.Add(Res.Get("Forms,PageSetup,DupHorizontal"));
- cbxDuplex.SelectedIndex = Report.PrintSettings.Duplex == Duplex.Default ? 0 : (int)Report.PrintSettings.Duplex;
- // Print mode
- cbxPrintMode.Items.Add(res.Get("PrintModeDefault"));
- cbxPrintMode.Items.Add(res.Get("PrintModeSplit"));
- cbxPrintMode.Items.Add(res.Get("PrintModeScale"));
- cbxPrintMode.SelectedIndex = (int)Report.PrintSettings.PrintMode;
- cbxPagesOnSheet.Items.Add(res.Get("PagesOnSheet1"));
- cbxPagesOnSheet.Items.Add(res.Get("PagesOnSheet2"));
- cbxPagesOnSheet.Items.Add(res.Get("PagesOnSheet4"));
- cbxPagesOnSheet.Items.Add(res.Get("PagesOnSheet8"));
- cbxPagesOnSheet.SelectedIndex = (int)Report.PrintSettings.PagesOnSheet;
- }
- private void UpdatePrintSettings()
- {
- PrintSettings ps = Report.PrintSettings;
- // Printer
- ps.Printer = (string)cbxPrinter.SelectedItem;
- if (cbSavePrinter.Visible)
- ps.SavePrinterWithReport = cbSavePrinter.Checked;
- ps.PrintToFile = cbPrintToFile.Checked && Config.PreviewSettings.AllowPrintToFile;
- if (PrintDialog && ps.PrintToFile)
- {
- using (SaveFileDialog dialog = new SaveFileDialog())
- {
- dialog.Filter = Res.Get("FileFilters,PrnFile");
- dialog.DefaultExt = "prn";
- if (dialog.ShowDialog() == DialogResult.OK)
- ps.PrintToFileName = dialog.FileName;
- else
- DialogResult = DialogResult.Cancel;
- }
- }
- // Page range
- if (rbAll.Checked)
- ps.PageRange = PageRange.All;
- else if (rbCurrent.Checked)
- ps.PageRange = PageRange.Current;
- else
- ps.PageRange = PageRange.PageNumbers;
- ps.PageNumbers = tbNumbers.Text;
- // Copies
- ps.Copies = (int)udCount.Value;
- ps.Collate = cbCollate.Checked;
- // Other
- ps.PrintPages = (PrintPages)cbxOddEven.SelectedIndex;
- ps.Reverse = cbxOrder.SelectedIndex == 1;
- ps.Duplex = (Duplex)(cbxDuplex.SelectedIndex == 0 ? -1 : cbxDuplex.SelectedIndex);
- if (cbxSource.SelectedIndex != -1)
- ps.PaperSource = printerSettings.PaperSources[cbxSource.SelectedIndex].RawKind;
- // Print mode
- ps.PrintMode = (PrintMode)cbxPrintMode.SelectedIndex;
- if (ps.PrintMode != PrintMode.Default)
- {
- PaperSize sz = printerSettings.PaperSizes[cbxPrintOnSheet.SelectedIndex];
- ps.PrintOnSheetWidth = sz.Width / 100f * 25.4f;
- ps.PrintOnSheetHeight = sz.Height / 100f * 25.4f;
- ps.PrintOnSheetRawPaperSize = sz.RawKind;
- ps.PagesOnSheet = ps.PrintMode == PrintMode.Scale ?
- (PagesOnSheet)cbxPagesOnSheet.SelectedIndex : PagesOnSheet.One;
- }
- else
- {
- ps.PrintOnSheetWidth = 210;
- ps.PrintOnSheetHeight = 297;
- ps.PrintOnSheetRawPaperSize = 0;
- ps.PagesOnSheet = PagesOnSheet.One;
- }
- }
- private void cbxPrinter_DrawItem(object sender, DrawItemEventArgs e)
- {
- e.DrawBackground();
- if (e.Index >= 0)
- {
- cbxPrinter.DrawImageAndText(e, GetImage(88), (string)cbxPrinter.Items[e.Index]);
- }
- }
- private void btnMoreOptions_Click(object sender, EventArgs e)
- {
- Collapsed = !Collapsed;
- }
- private void btnSettings_Click(object sender, EventArgs e)
- {
- PrinterUtils.ShowPropertiesDialog(printerSettings);
- cbxDuplex.SelectedIndex = printerSettings.Duplex == Duplex.Default ? 0 : (int)printerSettings.Duplex;
- }
- private void pnCollate_Paint(object sender, PaintEventArgs e)
- {
- string resName = cbCollate.Checked ? "Images.Collate1.png" : "Images.Collate2.png";
- using (Bitmap bmp = GetImage(resName))
- {
- e.Graphics.DrawImage(bmp, 0, 0);
- }
- }
- private void cbCollate_CheckedChanged(object sender, EventArgs e)
- {
- pnCollate.Refresh();
- }
- private void cbxPrintMode_DrawItem(object sender, DrawItemEventArgs e)
- {
- e.DrawBackground();
- if (e.Index >= 0)
- {
- string[] resNames = new string[] { "Images.DefaultMode.png", "Images.SplitMode.png", "Images.ScaleMode.png" };
- using (Bitmap bmp = GetImage(resNames[e.Index]))
- {
- cbxPrintMode.DrawImageAndText(e, bmp, (string)cbxPrintMode.Items[e.Index]);
- }
- }
- }
- private void cbxPrinter_SelectedIndexChanged(object sender, EventArgs e)
- {
- printerSettings.PrinterName = (string)cbxPrinter.SelectedItem;
- // paper
- int indexOfDefaultPaper = -1;
- try
- {
- PaperSize defaultPaper = printerSettings.DefaultPageSettings.PaperSize;
- cbxPrintOnSheet.Items.Clear();
- foreach (PaperSize ps in printerSettings.PaperSizes)
- {
- cbxPrintOnSheet.Items.Add(ps.PaperName);
- if (ps == defaultPaper)
- indexOfDefaultPaper = cbxPrintOnSheet.Items.Count - 1;
- }
- // probe PaperWidth, PaperHeight, RawPaperSize
- if (Report.PrintSettings.PrintOnSheetRawPaperSize != 0)
- {
- foreach (PaperSize ps in printerSettings.PaperSizes)
- {
- if (cbxPrintOnSheet.SelectedIndex == -1 &&
- PaperSizeEqual(ps, Report.PrintSettings.PrintOnSheetWidth,
- Report.PrintSettings.PrintOnSheetHeight, Report.PrintSettings.PrintOnSheetRawPaperSize))
- cbxPrintOnSheet.SelectedIndex = cbxPrintOnSheet.Items.IndexOf(ps.PaperName);
- }
- }
- // probe PaperWidth, PaperHeight only
- if (cbxPrintOnSheet.SelectedIndex == -1)
- {
- foreach (PaperSize ps in printerSettings.PaperSizes)
- {
- if (cbxPrintOnSheet.SelectedIndex == -1 &&
- PaperSizeEqual(ps, Report.PrintSettings.PrintOnSheetWidth, Report.PrintSettings.PrintOnSheetHeight, 0))
- cbxPrintOnSheet.SelectedIndex = cbxPrintOnSheet.Items.IndexOf(ps.PaperName);
- }
- }
- if (cbxPrintOnSheet.SelectedIndex == -1 && indexOfDefaultPaper < cbxPrintOnSheet.Items.Count)
- cbxPrintOnSheet.SelectedIndex = indexOfDefaultPaper;
- // paper source
- cbxSource.Items.Clear();
- int indexOfAutofeed = -1;
- foreach (PaperSource ps in printerSettings.PaperSources)
- {
- cbxSource.Items.Add(ps.SourceName);
- if (ps.Kind == PaperSourceKind.AutomaticFeed)
- indexOfAutofeed = cbxSource.Items.Count - 1;
- if (Report.PrintSettings.PaperSource == ps.RawKind)
- cbxSource.SelectedIndex = cbxSource.Items.Count - 1;
- }
- if (cbxSource.SelectedIndex == -1 && indexOfAutofeed < cbxSource.Items.Count)
- cbxSource.SelectedIndex = indexOfAutofeed;
- }
- catch
- {
- //
- }
- }
- private void cbxPrintMode_SelectedIndexChanged(object sender, EventArgs e)
- {
- bool enabled = cbxPrintMode.SelectedIndex != 0;
- bool enabled1 = cbxPrintMode.SelectedIndex == 2;
- lblPrintOnSheet.Enabled = enabled;
- cbxPrintOnSheet.Enabled = enabled;
- lblPagesOnSheet.Enabled = enabled1;
- cbxPagesOnSheet.Enabled = enabled1;
- }
- private void tbNumbers_KeyPress(object sender, KeyPressEventArgs e)
- {
- rbNumbers.Checked = true;
- }
- private void rbCurrent_CheckedChanged(object sender, EventArgs e)
- {
- if ((sender as RadioButton).Checked)
- tbNumbers.Text = "";
- }
- private void PrinterSetupForm_FormClosed(object sender, FormClosedEventArgs e)
- {
- if (DialogResult == DialogResult.OK)
- UpdatePrintSettings();
- }
- private void PrinterSetupForm_FormClosing(object sender, FormClosingEventArgs e)
- {
- if (DialogResult == DialogResult.OK)
- {
- string s = tbNumbers.Text;
- foreach (char c in s)
- {
- if (!(c == ' ' || c == ',' || c == '-' || (c >= '0' && c <= '9')))
- {
- FRMessageBox.Error(Res.Get("Forms,PrinterSetup,Error") + "\r\n" +
- Res.Get("Forms,PrinterSetup,Hint"));
- tbNumbers.Focus();
- e.Cancel = true;
- break;
- }
- }
- }
- }
- public override void Localize()
- {
- base.Localize();
- MyRes res = new MyRes("Forms,PrinterSetup");
- Text = res.Get("PrinterSetup");
- gbPrinter.Text = res.Get("Printer");
- cbSavePrinter.Text = res.Get("SavePrinter");
- btnSettings.Text = res.Get("Settings");
- cbPrintToFile.Text = res.Get("PrintToFile");
- gbPageRange.Text = res.Get("PageRange");
- rbAll.Text = res.Get("All");
- rbCurrent.Text = res.Get("Current");
- rbNumbers.Text = res.Get("Numbers");
- lblHint.Text = res.Get("Hint");
- gbCopies.Text = res.Get("Copies");
- lblCount.Text = res.Get("Count");
- cbCollate.Text = res.Get("Collate");
- gbOther.Text = res.Get("Other");
- lblOddEven.Text = res.Get("OddEven");
- lblOrder.Text = res.Get("Order");
- lblDuplex.Text = res.Get("Duplex");
- lblSource.Text = res.Get("Source");
- gbPrintMode.Text = res.Get("PrintMode");
- lblPrintOnSheet.Text = res.Get("PrintOnSheet");
- lblPagesOnSheet.Text = res.Get("PagesOnSheet");
- }
- public override void UpdateDpiDependencies()
- {
- base.UpdateDpiDependencies();
- cbxPrinter.ItemHeight = this.LogicalToDevice(16);
- cbxPrintMode.ItemHeight = this.LogicalToDevice(39);
- }
- public PrinterSetupForm()
- {
- InitializeComponent();
- Localize();
- Collapsed = true;
- printerSettings = new PrinterSettings();
- cbPrintToFile.Enabled = Config.PreviewSettings.AllowPrintToFile;
- btnSettings.Enabled = !Config.IsRunningOnMono;
- UIUtils.CheckRTL(this);
- UpdateDpiDependencies();
- }
- }
- }
|