123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- using System;
- using System.Drawing;
- using System.Drawing.Printing;
- using FastReport.Utils;
- using FastReport.TypeConverters;
- using FastReport.Design.PageDesigners.Page;
- namespace FastReport.Forms
- {
- internal partial class CustomLabelForm : BaseDialogForm
- {
- private XmlItem labelParameters;
- private PrinterSettings printerSettings;
- private Report sampleReport;
- private bool updating;
- public XmlItem LabelParameters
- {
- get { return labelParameters; }
- }
- private string ConvertMMtoUnits(float value)
- {
- return Converter.ToString(value, typeof(PaperConverter));
- }
- private float ConvertUnitsToInches(string value)
- {
- float floatValue = Converter.StringToFloat(value, true);
- switch (ReportWorkspace.Grid.GridUnits)
- {
- case PageUnits.Centimeters:
- floatValue /= 2.54f;
- break;
- case PageUnits.HundrethsOfInch:
- floatValue /= 100;
- break;
- case PageUnits.Inches:
- // do nothing
- break;
- case PageUnits.Millimeters:
- floatValue /= 25.4f;
- break;
- }
- return floatValue;
- }
- private string ConvertToXml(float value)
- {
- return Converter.ToString(Math.Round(value, 3));
- }
- private void UpdateSample()
- {
- float paperWidth = ConvertUnitsToInches(tbPaperWidth.Text);
- float paperHeight = ConvertUnitsToInches(tbPaperHeight.Text);
- float leftMargin = ConvertUnitsToInches(tbLeftMargin.Text);
- float topMargin = ConvertUnitsToInches(tbTopMargin.Text);
- float labelWidth = ConvertUnitsToInches(tbLabelWidth.Text);
- float labelHeight = ConvertUnitsToInches(tbLabelHeight.Text);
- int rows = (int)udRows.Value;
- int columns = (int)udColumns.Value;
- float rowGap = ConvertUnitsToInches(tbRowGap.Text);
- float columnGap = ConvertUnitsToInches(tbColumnGap.Text);
- labelParameters.Name = "";
- labelParameters.ClearProps();
- labelParameters.SetProp("Name", tbName.Text);
- labelParameters.SetProp("Width", ConvertToXml(labelWidth));
- labelParameters.SetProp("Height", ConvertToXml(labelHeight));
- labelParameters.SetProp("PaperWidth", ConvertToXml(paperWidth));
- labelParameters.SetProp("PaperHeight", ConvertToXml(paperHeight));
- if (cbLandscape.Checked)
- labelParameters.SetProp("Landscape", "true");
- labelParameters.SetProp("LeftMargin", ConvertToXml(leftMargin));
- labelParameters.SetProp("TopMargin", ConvertToXml(topMargin));
- labelParameters.SetProp("Rows", rows.ToString());
- labelParameters.SetProp("Columns", columns.ToString());
- labelParameters.SetProp("RowGap", ConvertToXml(rowGap));
- labelParameters.SetProp("ColumnGap", ConvertToXml(columnGap));
- ReportPage page = sampleReport.Pages[0] as ReportPage;
- page.Clear();
- page.Landscape = cbLandscape.Checked;
- page.PaperWidth = paperWidth * 25.4f;
- page.PaperHeight = paperHeight * 25.4f;
- page.LeftMargin = leftMargin * 25.4f;
- page.TopMargin = topMargin * 25.4f;
- DataBand band = new DataBand();
- band.Parent = page;
- bool fit = true;
- for (int x = 0; x < columns; x++)
- {
- for (int y = 0; y < rows; y++)
- {
- ShapeObject shape = new ShapeObject();
- shape.Parent = band;
- shape.Shape = ShapeKind.RoundRectangle;
- shape.Border.Color = Color.Gray;
- shape.Bounds = new RectangleF(x * (labelWidth + columnGap) * 96,
- y * (labelHeight + rowGap) * 96,
- labelWidth * 96,
- labelHeight * 96);
- if (shape.Right / Units.Millimeters > page.PaperWidth - page.LeftMargin + 0.1f ||
- shape.Bottom / Units.Millimeters > page.PaperHeight - page.TopMargin + 0.1f)
- {
- (shape.Fill as SolidFill).Color = Color.Red;
- fit = false;
- }
- }
- }
- rcSample.Report = sampleReport;
- lblWarning.Visible = !fit;
- btnOk.Enabled = fit;
- }
- private void cbxPaper_SelectedIndexChanged(object sender, EventArgs e)
- {
- if (updating)
- return;
- foreach (PaperSize ps in printerSettings.PaperSizes)
- {
- if (ps.PaperName == (string)cbxPaper.SelectedItem)
- {
- float psWidth = ps.Width / 100f * 25.4f;
- float psHeight = ps.Height / 100f * 25.4f;
- if (ps.Kind == PaperKind.A4)
- {
- psWidth = 210;
- psHeight = 297;
- }
- if (cbLandscape.Checked)
- {
- float ex = psWidth;
- psWidth = psHeight;
- psHeight = ex;
- }
- updating = true;
- tbPaperWidth.Text = ConvertMMtoUnits(psWidth);
- tbPaperHeight.Text = ConvertMMtoUnits(psHeight);
- updating = false;
- break;
- }
- }
- UpdateSample();
- }
- private void cbLandscape_CheckedChanged(object sender, EventArgs e)
- {
- if (updating)
- return;
- string w = tbPaperWidth.Text;
- string h = tbPaperHeight.Text;
- // avoid reset papersize to custom
- updating = true;
- tbPaperWidth.Text = h;
- tbPaperHeight.Text = w;
- updating = false;
- UpdateSample();
- }
- private void tbPaperWidth_TextChanged(object sender, EventArgs e)
- {
- if (updating)
- return;
- cbxPaper.SelectedIndex = 0;
- UpdateSample();
- }
- private void tbLeftMargin_TextChanged(object sender, EventArgs e)
- {
- if (updating)
- return;
- UpdateSample();
- }
- public void Init(string suggestedName)
- {
- labelParameters = new XmlItem();
- printerSettings = new PrinterSettings();
- sampleReport = new Report();
- sampleReport.Pages.Add(new ReportPage());
- sampleReport.SmoothGraphics = true;
- tbName.Text = suggestedName;
- // paper
- PaperSize defaultPaper = printerSettings.DefaultPageSettings.PaperSize;
- cbxPaper.Items.Add(Res.Get("Forms,PageSetup,Custom"));
- foreach (PaperSize ps in printerSettings.PaperSizes)
- {
- cbxPaper.Items.Add(ps.PaperName);
- if (ps.PaperName == defaultPaper.PaperName)
- cbxPaper.SelectedIndex = cbxPaper.Items.Count - 1;
- }
- tbLeftMargin.Text = ConvertMMtoUnits(0);
- tbTopMargin.Text = ConvertMMtoUnits(0);
- // label
- tbLabelWidth.Text = ConvertMMtoUnits(defaultPaper.Width / 100f * 25.4f / 2);
- tbLabelHeight.Text = ConvertMMtoUnits(defaultPaper.Height / 100f * 25.4f / 2);
- udRows.Value = 2;
- udColumns.Value = 2;
- tbRowGap.Text = ConvertMMtoUnits(0);
- tbColumnGap.Text = ConvertMMtoUnits(0);
- }
- public override void Localize()
- {
- base.Localize();
- MyRes res = new MyRes("Forms,CustomLabel");
- Text = res.Get("");
- lblName.Text = res.Get("Name");
- gbPaper.Text = res.Get("Paper");
- cbLandscape.Text = res.Get("Landscape");
- lblPaperWidth.Text = res.Get("PaperWidth");
- lblPaperHeight.Text = res.Get("PaperHeight");
- lblLeftMargin.Text = res.Get("LeftMargin");
- lblTopMargin.Text = res.Get("TopMargin");
- gbLabel.Text = res.Get("Label");
- lblLabelWidth.Text = res.Get("LabelWidth");
- lblLabelHeight.Text = res.Get("LabelHeight");
- lblRows.Text = Res.Get("Forms,LabelWizard,Rows");
- lblColumns.Text = Res.Get("Forms,LabelWizard,Columns");
- lblRowGap.Text = res.Get("RowGap");
- lblColumnGap.Text = res.Get("ColumnGap");
- gbSample.Text = Res.Get("Misc,Sample");
- lblWarning.Text = res.Get("Warning");
- }
- public CustomLabelForm()
- {
- InitializeComponent();
- Localize();
- UIUtils.CheckRTL(this);
- }
- }
- }
|