123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 |
- using System;
- using System.Drawing;
- using System.Windows.Forms;
- using FastReport.Utils;
- namespace FastReport.Forms
- {
- internal partial class StyleEditorForm : BaseDialogForm
- {
- private Report report;
- private StyleCollection styles;
- private TextObject sample;
- private Timer refreshTimer;
- private bool updating;
- public Style CurrentStyle
- {
- get
- {
- if (lvStyles.SelectedItems.Count == 0)
- return null;
- return lvStyles.SelectedItems[0].Tag as Style;
- }
- }
- private StyleCollection Styles
- {
- get { return styles; }
- set
- {
- styles = value.Clone();
- PopulateStyles();
- }
- }
- public override void Localize()
- {
- base.Localize();
- MyRes res = new MyRes("Forms,Style");
- Text = res.Get("");
- gbStyles.Text = res.Get("Styles");
- btnAdd.Text = res.Get("Add");
- btnDelete.Text = res.Get("Delete");
- btnEdit.Text = res.Get("Edit");
- btnLoad.Text = res.Get("Load");
- btnSave.Text = res.Get("Save");
- gbSettings.Text = res.Get("Settings");
- btnBorder.Text = res.Get("Border");
- btnFill.Text = res.Get("Fill");
- btnFont.Text = res.Get("Font");
- btnTextColor.Text = res.Get("TextColor");
- sample.Text = Res.Get("Misc,Sample");
- }
- private void pnSample_Paint(object sender, PaintEventArgs e)
- {
- if (CurrentStyle == null)
- return;
- #if AVALONIA
- e.Graphics.FontScale = 1;
- #endif
- float scale = this.DpiMultiplier();
- TextObject sample = new TextObject();
- sample.Text = Res.Get("Misc,Sample");
- sample.ApplyStyle(CurrentStyle);
- sample.Bounds = new RectangleF(2, 2, (int)(pnSample.Width / scale) - 4, (int)(pnSample.Height / scale) - 4);
- sample.HorzAlign = HorzAlign.Center;
- sample.VertAlign = VertAlign.Center;
- using (GraphicCache cache = new GraphicCache())
- {
- sample.Draw(new FRPaintEventArgs(e.Graphics, scale, scale, cache));
- }
- }
- private void RefreshSample()
- {
- pnSample.Refresh();
- }
- private void UpdateControls()
- {
- bool enabled = CurrentStyle != null;
- btnDelete.Enabled = enabled;
- btnEdit.Enabled = enabled;
- btnUp.Enabled = enabled;
- btnDown.Enabled = enabled;
- gbSettings.Enabled = enabled;
- if (enabled)
- {
- updating = true;
- cbApplyBorder.Checked = CurrentStyle.ApplyBorder;
- cbApplyFill.Checked = CurrentStyle.ApplyFill;
- cbApplyTextFill.Checked = CurrentStyle.ApplyTextFill;
- cbApplyFont.Checked = CurrentStyle.ApplyFont;
- btnBorder.Enabled = CurrentStyle.ApplyBorder;
- btnFill.Enabled = CurrentStyle.ApplyFill;
- btnTextColor.Enabled = CurrentStyle.ApplyTextFill;
- btnFont.Enabled = CurrentStyle.ApplyFont;
- updating = false;
- }
- }
- private void SetApply()
- {
- foreach (ListViewItem li in lvStyles.SelectedItems)
- {
- Style c = li.Tag as Style;
- c.ApplyBorder = cbApplyBorder.Checked;
- c.ApplyFill = cbApplyFill.Checked;
- c.ApplyTextFill = cbApplyTextFill.Checked;
- c.ApplyFont = cbApplyFont.Checked;
- }
- RefreshSample();
- }
- private void PopulateStyles()
- {
- lvStyles.Items.Clear();
- foreach (Style s in styles)
- {
- ListViewItem li = lvStyles.Items.Add(s.Name, 87);
- li.Tag = s;
- }
- if (lvStyles.Items.Count > 0)
- lvStyles.Items[0].Selected = true;
- UpdateControls();
- lvStyles.Focus();
- }
- private void FTimer_Tick(object sender, EventArgs e)
- {
- UpdateControls();
- RefreshSample();
- refreshTimer.Stop();
- }
- private void lvStyles_SelectedIndexChanged(object sender, EventArgs e)
- {
- refreshTimer.Start();
- }
- private void lvStyles_AfterLabelEdit(object sender, LabelEditEventArgs e)
- {
- if (e.Label == null)
- return;
- if (e.Label == "")
- {
- e.CancelEdit = true;
- return;
- }
- Style s = lvStyles.Items[e.Item].Tag as Style;
- bool nameExists = false;
- foreach (Style s1 in styles)
- {
- if (s1 != s && String.Compare(s1.Name, e.Label) == 0)
- {
- nameExists = true;
- break;
- }
- }
- if (!nameExists)
- s.Name = e.Label;
- else
- {
- FRMessageBox.Error(Res.Get("Messages,DuplicateStyle"));
- e.CancelEdit = true;
- }
- }
- private void btnAdd_Click(object sender, EventArgs e)
- {
- Style s = new Style();
- int styleNumber = 1;
- string baseName = Res.Get("Forms,Style,StyleName");
- while (styles.IndexOf(baseName + styleNumber.ToString()) != -1)
- styleNumber++;
- s.Name = baseName + styleNumber.ToString();
- styles.Add(s);
- ListViewItem li = lvStyles.Items.Add(s.Name, 87);
- li.Tag = s;
- li.BeginEdit();
- }
- private void btnEdit_Click(object sender, EventArgs e)
- {
- if (lvStyles.SelectedItems.Count == 1)
- lvStyles.SelectedItems[0].BeginEdit();
- }
- private void btnDelete_Click(object sender, EventArgs e)
- {
- while (lvStyles.SelectedItems.Count > 0)
- {
- Style s = lvStyles.SelectedItems[0].Tag as Style;
- styles.Remove(s);
- lvStyles.Items.Remove(lvStyles.SelectedItems[0]);
- }
- }
- private void btnUp_Click(object sender, EventArgs e)
- {
- if (lvStyles.SelectedItems.Count != 1)
- return;
- int index = lvStyles.SelectedIndices[0];
- if (index > 0)
- {
- ListViewItem li = lvStyles.SelectedItems[0];
- lvStyles.Items.Remove(li);
- lvStyles.Items.Insert(index - 1, li);
- li.Selected = false;
- li.Selected = true;
- Style s = styles[index];
- styles.Remove(s);
- styles.Insert(index - 1, s);
- }
- }
- private void btnDown_Click(object sender, EventArgs e)
- {
- if (lvStyles.SelectedItems.Count != 1)
- return;
- int index = lvStyles.SelectedIndices[0];
- if (index < lvStyles.Items.Count - 1)
- {
- ListViewItem li = lvStyles.SelectedItems[0];
- lvStyles.Items.Remove(li);
- lvStyles.Items.Insert(index + 1, li);
- li.Selected = false;
- li.Selected = true;
- Style s = styles[index];
- styles.Remove(s);
- styles.Insert(index + 1, s);
- }
- }
- private void btnLoad_Click(object sender, EventArgs e)
- {
- using (OpenFileDialog dialog = new OpenFileDialog())
- {
- dialog.Filter = Res.Get("FileFilters,Style");
- if (dialog.ShowDialog() == DialogResult.OK)
- {
- styles.Load(dialog.FileName);
- PopulateStyles();
- }
- }
- }
- private void btnSave_Click(object sender, EventArgs e)
- {
- using (SaveFileDialog dialog = new SaveFileDialog())
- {
- dialog.Filter = Res.Get("FileFilters,Style");
- dialog.DefaultExt = "frs";
- if (dialog.ShowDialog() == DialogResult.OK)
- styles.Save(dialog.FileName);
- }
- }
- private void cbApplyBorder_CheckedChanged(object sender, EventArgs e)
- {
- if (updating || CurrentStyle == null)
- return;
- btnBorder.Enabled = cbApplyBorder.Checked;
- SetApply();
- }
- private void cbApplyFill_CheckedChanged(object sender, EventArgs e)
- {
- if (updating || CurrentStyle == null)
- return;
- btnFill.Enabled = cbApplyFill.Checked;
- SetApply();
- }
- private void cbApplyFont_CheckedChanged(object sender, EventArgs e)
- {
- if (updating || CurrentStyle == null)
- return;
- btnFont.Enabled = cbApplyFont.Checked;
- SetApply();
- }
- private void cbApplyTextFill_CheckedChanged(object sender, EventArgs e)
- {
- if (updating || CurrentStyle == null)
- return;
- btnTextColor.Enabled = cbApplyTextFill.Checked;
- SetApply();
- }
- private void btnBorder_Click(object sender, EventArgs e)
- {
- if (CurrentStyle == null)
- return;
- using (BorderEditorForm editor = new BorderEditorForm())
- {
- editor.Border = CurrentStyle.Border.Clone();
- if (editor.ShowDialog() == DialogResult.OK)
- {
- foreach (ListViewItem li in lvStyles.SelectedItems)
- {
- (li.Tag as Style).Border = editor.Border.Clone();
- }
- RefreshSample();
- }
- }
- }
- private void btnColor_Click(object sender, EventArgs e)
- {
- if (CurrentStyle == null)
- return;
- using (FillEditorForm editor = new FillEditorForm())
- {
- editor.Fill = CurrentStyle.Fill.Clone();
- if (editor.ShowDialog() == DialogResult.OK)
- {
- foreach (ListViewItem li in lvStyles.SelectedItems)
- {
- (li.Tag as Style).Fill = editor.Fill.Clone();
- }
- RefreshSample();
- }
- }
- }
- private void btnFont_Click(object sender, EventArgs e)
- {
- if (CurrentStyle == null)
- return;
- using (FontDialog dialog = new FontDialog())
- {
- dialog.Font = CurrentStyle.Font;
- if (dialog.ShowDialog() == DialogResult.OK)
- {
- foreach (ListViewItem li in lvStyles.SelectedItems)
- {
- (li.Tag as Style).Font = new Font(dialog.Font.FontFamily, (float)Math.Round(dialog.Font.Size), dialog.Font.Style);
- }
- RefreshSample();
- }
- }
- }
- private void btnTextColor_Click(object sender, EventArgs e)
- {
- if (CurrentStyle == null)
- return;
- using (FillEditorForm editor = new FillEditorForm())
- {
- editor.Fill = CurrentStyle.TextFill.Clone();
- if (editor.ShowDialog() == DialogResult.OK)
- {
- foreach (ListViewItem li in lvStyles.SelectedItems)
- {
- (li.Tag as Style).TextFill = editor.Fill.Clone();
- }
- RefreshSample();
- }
- }
- }
- private void StyleEditorForm_FormClosed(object sender, FormClosedEventArgs e)
- {
- if (DialogResult == DialogResult.OK)
- {
- report.Styles = Styles;
- report.ApplyStyles();
- }
- sample.Dispose();
- refreshTimer.Dispose();
- }
- public override void UpdateDpiDependencies()
- {
- base.UpdateDpiDependencies();
- btnUp.Image = GetImage(208);
- btnDown.Image = GetImage(209);
- btnBorder.Image = GetImage(36);
- btnFill.Image = GetImage(38);
- btnFont.Image = GetImage(59);
- btnTextColor.Image = GetImage(23);
- lvStyles.SmallImageList = GetImages();
- }
- public StyleEditorForm(Report report)
- {
- this.report = report;
- sample = new TextObject();
- refreshTimer = new Timer();
- refreshTimer.Interval = 50;
- refreshTimer.Tick += new EventHandler(FTimer_Tick);
- InitializeComponent();
- Localize();
- Styles = this.report.Styles;
- UIUtils.CheckRTL(this);
- UpdateDpiDependencies();
- }
- }
- }
|