123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using System.IO;
- using FastReport.Utils;
- using FastReport.Design.PageDesigners.Page;
- using FastReport.TypeConverters;
- namespace FastReport.Forms
- {
- internal partial class LabelWizardForm : BaseDialogForm
- {
- private XmlDocument labels;
- private Report report;
- public string SelectedManufacturer
- {
- get { return (string)cbxLabels.SelectedItem; }
- }
- public string SelectedLabelName
- {
- get { return SelectedLabelParameters.GetProp("Name"); }
- }
- public XmlItem SelectedLabelParameters
- {
- get { return lbxLabels.SelectedItem as XmlItem; }
- }
- private void cbxLabels_SelectedIndexChanged(object sender, EventArgs e)
- {
- // find the corresponding xml node
- XmlItem labelItem = null;
- string label = (string)cbxLabels.SelectedItem;
- for (int i = 0; i < labels.Root.Count; i++)
- {
- if (labels.Root[i].GetProp("Name") == label)
- {
- labelItem = labels.Root[i];
- break;
- }
- }
- lbxLabels.Items.Clear();
- if (labelItem != null)
- {
- for (int i = 0; i < labelItem.Count; i++)
- {
- lbxLabels.Items.Add(labelItem[i]);
- }
- }
- if (lbxLabels.Items.Count > 0)
- lbxLabels.SelectedIndex = 0;
- else
- lbxLabels_SelectedIndexChanged(null, EventArgs.Empty);
- btnOk.Enabled = lbxLabels.Items.Count > 0;
- btnDelete.Visible = cbxLabels.SelectedIndex == cbxLabels.Items.Count - 1;
- }
- private void lbxLabels_DrawItem(object sender, DrawItemEventArgs e)
- {
- e.DrawBackground();
- if (e.Index >= 0)
- {
- XmlItem item = lbxLabels.Items[e.Index] as XmlItem;
- this.DrawImageAndText(e, null, item.GetProp("Name"));
- }
- }
- private void lbxLabels_SelectedIndexChanged(object sender, EventArgs e)
- {
- XmlItem item = lbxLabels.SelectedItem as XmlItem;
- if (item != null)
- {
- float width = Converter.StringToFloat(item.GetProp("Width")) * Units.Inches;
- float height = Converter.StringToFloat(item.GetProp("Height")) * Units.Inches;
- float paperWidth = Converter.StringToFloat(item.GetProp("PaperWidth")) * Units.Inches;
- float paperHeight = Converter.StringToFloat(item.GetProp("PaperHeight")) * Units.Inches;
- string rows = item.GetProp("Rows");
- if (String.IsNullOrEmpty(rows))
- rows = "1";
- string columns = item.GetProp("Columns");
- if (String.IsNullOrEmpty(columns))
- columns = "1";
- lblSize1.Text = Converter.ToString(width, typeof(UnitsConverter)) + " x " +
- Converter.ToString(height, typeof(UnitsConverter));
- lblPaperSize1.Text = Converter.ToString(paperWidth, typeof(UnitsConverter)) + " x " +
- Converter.ToString(paperHeight, typeof(UnitsConverter));
- lblRows1.Text = rows;
- lblColumns1.Text = columns;
- }
- btnDelete.Enabled = item != null;
- }
- private void btnCustom_Click(object sender, EventArgs e)
- {
- using (CustomLabelForm form = new CustomLabelForm())
- {
- XmlItem customManufacturer = labels.Root[labels.Root.Count - 1];
- form.Init(Res.Get("Forms,LabelWizard,Label") + (customManufacturer.Count + 1).ToString());
- if (form.ShowDialog() == DialogResult.OK)
- {
- customManufacturer.AddItem(form.LabelParameters);
- cbxLabels.SelectedIndex = cbxLabels.Items.Count - 1;
- cbxLabels_SelectedIndexChanged(this, EventArgs.Empty);
- lbxLabels.SelectedIndex = lbxLabels.Items.Count - 1;
- }
- }
- }
- private void btnDelete_Click(object sender, EventArgs e)
- {
- XmlItem customManufacturer = labels.Root[labels.Root.Count - 1];
- customManufacturer.Items.RemoveAt(lbxLabels.SelectedIndex);
- cbxLabels.SelectedIndex = cbxLabels.Items.Count - 1;
- cbxLabels_SelectedIndexChanged(this, EventArgs.Empty);
- lbxLabels.SelectedIndex = lbxLabels.Items.Count - 1;
- }
- private void LabelWizardForm_FormClosed(object sender, FormClosedEventArgs e)
- {
- if (DialogResult == DialogResult.OK)
- Done();
- }
- private void Init()
- {
- // load standard labels
- labels = new XmlDocument();
- using (Stream labelStream = ResourceLoader.UnpackStream("labels.dat"))
- {
- labels.Load(labelStream);
- }
- // localize the manufacturers/labels
- MyRes manRes = new MyRes("Forms,LabelWizard,Manufacturers");
- MyRes labelRes = new MyRes("Forms,LabelWizard,Labels");
- for (int i = 0; i < labels.Root.Count; i++)
- {
- XmlItem xi = labels.Root[i];
- xi.SetProp("Name", manRes.Get(xi.GetProp("Name")));
- for (int j = 0; j < xi.Count; j++)
- {
- XmlItem xi1 = xi[j];
- string labelName = xi1.GetProp("Name");
- if (labelName.Contains("["))
- {
- int start = labelName.IndexOf('[');
- int end = labelName.IndexOf(']');
- string localizedName = labelName.Substring(start + 1, end - start - 1);
- localizedName = labelRes.Get(localizedName);
- labelName = labelName.Remove(start, end - start + 1).Insert(start, localizedName);
- xi1.SetProp("Name", labelName);
- }
- }
- }
- // add user-defined labels
- XmlItem customManufacturer = labels.Root.Add();
- customManufacturer.SetProp("Name", Res.Get("Forms,LabelWizard,Custom"));
- // get the list of user labels from config file
- XmlItem configLabels = Config.Root.FindItem("LabelWizard");
- for (int i = 0; i < configLabels.Count; i++)
- {
- XmlItem addItem = customManufacturer.Add();
- configLabels[i].CopyPropsTo(addItem);
- }
- // make a list of manufacturers
- for (int i = 0; i < labels.Root.Count; i++)
- {
- cbxLabels.Items.Add(labels.Root[i].GetProp("Name"));
- }
- // position to last used items
- int index = cbxLabels.Items.IndexOf(configLabels.GetProp("Manufacturer"));
- if (index >= 0)
- {
- cbxLabels.SelectedIndex = index;
- for (int i = 0; i < lbxLabels.Items.Count; i++)
- {
- XmlItem item = lbxLabels.Items[i] as XmlItem;
- if (item.GetProp("Name") == configLabels.GetProp("Label"))
- {
- lbxLabels.SelectedIndex = i;
- break;
- }
- }
- }
- else
- cbxLabels.SelectedIndex = 0;
- }
- private void Done()
- {
- // update label parameters and report page layout
- XmlItem labelParameters = lbxLabels.SelectedItem as XmlItem;
- SetReportPageLayout(labelParameters, report.Pages[0] as ReportPage);
- // save user-defined labels to config file
- XmlItem customManufacturer = labels.Root[labels.Root.Count - 1];
- XmlItem configLabels = Config.Root.FindItem("LabelWizard");
- configLabels.Clear();
- for (int i = 0; i < customManufacturer.Count; i++)
- {
- XmlItem addItem = configLabels.Add();
- addItem.Name = "CustomLabel";
- customManufacturer[i].CopyPropsTo(addItem);
- }
- // write last used items
- configLabels.SetProp("Manufacturer", SelectedManufacturer);
- configLabels.SetProp("Label", SelectedLabelName);
- // tell the designer to reflect changes
- report.Designer.SetModified(null, "ChangeReport");
- }
- private void SetReportPageLayout(XmlItem labelParameters, ReportPage page)
- {
- float paperWidth = Converter.StringToFloat(labelParameters.GetProp("PaperWidth"), true) * 25.4f;
- float paperHeight = Converter.StringToFloat(labelParameters.GetProp("PaperHeight"), true) * 25.4f;
- float leftMargin = Converter.StringToFloat(labelParameters.GetProp("LeftMargin"), true) * 25.4f;
- float topMargin = Converter.StringToFloat(labelParameters.GetProp("TopMargin"), true) * 25.4f;
- float labelWidth = Converter.StringToFloat(labelParameters.GetProp("Width"), true) * 25.4f;
- float labelHeight = Converter.StringToFloat(labelParameters.GetProp("Height"), true) * 25.4f;
- int rows = (int)Converter.StringToFloat(labelParameters.GetProp("Rows"), true);
- if (rows == 0)
- rows = 1;
- int columns = (int)Converter.StringToFloat(labelParameters.GetProp("Columns"), true);
- if (columns == 0)
- columns = 1;
- float rowGap = Converter.StringToFloat(labelParameters.GetProp("RowGap"), true) * 25.4f;
- float columnGap = Converter.StringToFloat(labelParameters.GetProp("ColumnGap"), true) * 25.4f;
- // setup paper
- page.Clear();
- page.Landscape = labelParameters.GetProp("Landscape") == "true";
- page.PaperWidth = paperWidth;
- page.PaperHeight = paperHeight;
- page.LeftMargin = leftMargin;
- page.RightMargin = 0;
- page.TopMargin = topMargin;
- page.BottomMargin = 0;
- // setup columns
- page.Columns.Count = columns;
- page.Columns.Width = labelWidth;
- page.Columns.Positions.Clear();
- for (int i = 0; i < columns; i++)
- {
- page.Columns.Positions.Add(i * (labelWidth + columnGap));
- }
- // setup data band
- DataBand band = new DataBand();
- page.Bands.Add(band);
- band.CreateUniqueName();
- band.Width = labelWidth * Units.Millimeters;
- band.Height = labelHeight * Units.Millimeters;
- // setup row gap (use child band)
- if (rowGap > 0)
- {
- band.Child = new ChildBand();
- band.Child.CreateUniqueName();
- band.Child.Height = rowGap * Units.Millimeters;
- }
- }
- public override void Localize()
- {
- base.Localize();
- MyRes res = new MyRes("Forms,LabelWizard");
- Text = res.Get("");
- lblHint.Text = res.Get("Hint");
- gbLabel.Text = res.Get("Label");
- lblManufacturer.Text = res.Get("Manufacturer");
- lblProduct.Text = res.Get("Product");
- gbParameters.Text = res.Get("Parameters");
- lblSize.Text = res.Get("Size");
- lblPaperSize.Text = res.Get("PaperSize");
- lblRows.Text = res.Get("Rows");
- lblColumns.Text = res.Get("Columns");
- btnCustom.Text = res.Get("CustomLabel");
- btnDelete.Text = res.Get("Delete");
- }
- public void InitWizard(Report report)
- {
- this.report = report;
- }
- public override void UpdateDpiDependencies()
- {
- base.UpdateDpiDependencies();
- lbxLabels.ItemHeight = this.LogicalToDevice(15);
- cbxLabels.ItemHeight = lbxLabels.ItemHeight;
- cbxLabels.DropDownHeight = cbxLabels.ItemHeight * cbxLabels.Items.Count;
- lblHint.Height = gbLabel.Top - 4;
- }
- public LabelWizardForm()
- {
- InitializeComponent();
- Init();
- Localize();
- UIUtils.CheckRTL(this);
- UpdateDpiDependencies();
- }
- }
- }
|