123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using FastReport.Utils;
- using FastReport.Design;
- using FastReport.Design.PageDesigners.Page;
- namespace FastReport.Forms
- {
- internal partial class GroupExpertForm : BaseDialogForm
- {
- private Designer designer;
- private Report report;
- private ReportPage page;
- private void FillGroups(GroupHeaderBand group)
- {
- if (group == null)
- return;
- lbGroups.Items.Add(group);
- FillGroups(group.NestedGroup);
- }
- private void UpdateButtonsState()
- {
- int itemIndex = lbGroups.SelectedIndex;
- btnEdit.Enabled = itemIndex != -1;
- btnDelete.Enabled = itemIndex != -1;
- btnUp.Enabled = itemIndex > 0;
- btnDown.Enabled = itemIndex >= 0 && itemIndex < lbGroups.Items.Count - 1;
- }
- private void lbGroups_DrawItem(object sender, DrawItemEventArgs e)
- {
- e.DrawBackground();
- if (e.Index >= 0)
- {
- GroupHeaderBand c = lbGroups.Items[e.Index] as GroupHeaderBand;
- this.DrawImageAndText(e, GetImage(RegisteredObjects.FindObject(c).ImageIndex), c.GetInfoText());
- }
-
- /*e.Graphics.FillRectangle((e.State & DrawItemState.Selected) != 0 ? SystemBrushes.Highlight : SystemBrushes.Window,
- new Rectangle(e.Bounds.X + 22, e.Bounds.Y, e.Bounds.Width - 22, e.Bounds.Height));
- if (e.Index < 0)
- return;
- GroupHeaderBand c = lbGroups.Items[e.Index] as GroupHeaderBand;
- Image img = RegisteredObjects.FindObject(c).Image;
- e.Graphics.DrawImage(img, e.Bounds.X + 2, e.Bounds.Y);
- TextRenderer.DrawText(e.Graphics, c.GetInfoText(), e.Font,
- new Point(e.Bounds.X + 24, e.Bounds.Y + (e.Bounds.Height - lbGroups.ItemHeight) / 2), e.ForeColor);*/
- }
- private void btnAdd_Click(object sender, EventArgs e)
- {
- if (String.IsNullOrEmpty(cbxDataColumn.Text))
- return;
- GroupHeaderBand group = new GroupHeaderBand();
- group.Condition = cbxDataColumn.Text;
- group.SetReport(report);
- lbGroups.Items.Add(group);
- lbGroups.SelectedItem = group;
- }
- private void lbGroups_SelectedIndexChanged(object sender, EventArgs e)
- {
- UpdateButtonsState();
- }
- private void btnEdit_Click(object sender, EventArgs e)
- {
- GroupHeaderBand group = lbGroups.SelectedItem as GroupHeaderBand;
- group.InvokeEditor();
- }
- private void btnDelete_Click(object sender, EventArgs e)
- {
- int index = lbGroups.SelectedIndex;
- lbGroups.Items.RemoveAt(index);
- if (index >= lbGroups.Items.Count)
- index--;
- if (index < 0)
- index = 0;
- if (index < lbGroups.Items.Count)
- lbGroups.SelectedIndex = index;
- }
- private void btnUp_Click(object sender, EventArgs e)
- {
- object item = lbGroups.SelectedItem;
- int index = lbGroups.SelectedIndex;
- lbGroups.Items.Remove(item);
- lbGroups.Items.Insert(index - 1, item);
- lbGroups.SelectedItem = item;
- }
- private void btnDown_Click(object sender, EventArgs e)
- {
- object item = lbGroups.SelectedItem;
- int index = lbGroups.SelectedIndex;
- lbGroups.Items.Remove(item);
- lbGroups.Items.Insert(index + 1, item);
- lbGroups.SelectedItem = item;
- }
- private void GroupExpertForm_Shown(object sender, EventArgs e)
- {
- lblHint.Width = gbGroupCondition.Width - lblHint.Left * 2;
- lbGroups.Height = gbGroups.Height - lbGroups.Top - 12;
- }
- private void GroupExpertForm_FormClosed(object sender, FormClosedEventArgs e)
- {
- Done();
- }
- private void Init()
- {
- cbxDataColumn.Report = report;
- // fill existing groups
- foreach (BandBase band in page.Bands)
- {
- if (band is GroupHeaderBand)
- {
- FillGroups(band as GroupHeaderBand);
- break;
- }
- }
- UpdateButtonsState();
- }
- private void Done()
- {
- if (DialogResult == DialogResult.OK)
- {
- float defaultHeight = Units.Millimeters * 10;
- if (ReportWorkspace.Grid.GridUnits == PageUnits.Inches ||
- ReportWorkspace.Grid.GridUnits == PageUnits.HundrethsOfInch)
- defaultHeight = Units.Inches * 0.4f;
- GroupHeaderBand initialGroup = null;
- DataBand data = null;
- int childIndex = -1;
- foreach (BandBase band in page.Bands)
- {
- if (band is GroupHeaderBand)
- {
- childIndex = band.ZOrder;
- initialGroup = band as GroupHeaderBand;
- data = (band as GroupHeaderBand).GroupDataBand;
- break;
- }
- else if (band is DataBand)
- {
- childIndex = band.ZOrder;
- data = band as DataBand;
- break;
- }
- }
- // report has no groups nor databands, create a databand
- if (childIndex == -1)
- {
- data = new DataBand();
- data.Height = defaultHeight;
- childIndex = 0;
- }
- // connect groups to each other
- data.Parent = null;
- Base parent = null;
- for (int i = 0; i < lbGroups.Items.Count; i++)
- {
- GroupHeaderBand group = lbGroups.Items[i] as GroupHeaderBand;
- group.Parent = parent;
- group.Data = i < lbGroups.Items.Count - 1 ? null : data;
- parent = group;
- }
- // insert a group to the report page
- if (lbGroups.Items.Count > 0)
- {
- GroupHeaderBand firstGroup = lbGroups.Items[0] as GroupHeaderBand;
- page.Bands.Insert(childIndex, firstGroup);
- // create unique names
- if (String.IsNullOrEmpty(firstGroup.GroupDataBand.Name))
- firstGroup.GroupDataBand.CreateUniqueName();
- for (int i = 0; i < lbGroups.Items.Count; i++)
- {
- GroupHeaderBand group = lbGroups.Items[i] as GroupHeaderBand;
- if (String.IsNullOrEmpty(group.Name))
- {
- group.Height = defaultHeight;
- group.CreateUniqueName();
- // create text object with group name
- TextObject text = new TextObject();
- text.Parent = group;
- text.CreateUniqueName();
- text.Bounds = new RectangleF(new PointF(0, 0), text.GetPreferredSize());
- text.Text = "[" + group.Condition + "]";
- // create group footer
- group.GroupFooter = new GroupFooterBand();
- group.GroupFooter.Height = defaultHeight;
- group.GroupFooter.CreateUniqueName();
- }
- }
- }
- else
- {
- if (!String.IsNullOrEmpty(data.Name))
- page.Bands.Insert(childIndex, data);
- }
- // delete initial group if it was deleted in the expert
- if (initialGroup != null && !lbGroups.Items.Contains(initialGroup))
- initialGroup.Dispose();
- }
- }
- public override void Localize()
- {
- base.Localize();
- MyRes res = new MyRes("Forms,GroupExpert");
- Text = res.Get("");
- gbGroupCondition.Text = res.Get("Condition");
- lblHint.Text = res.Get("Hint");
- btnAdd.Text = res.Get("Add");
- gbGroups.Text = res.Get("Groups");
- btnEdit.Text = res.Get("Edit");
- btnDelete.Text = res.Get("Delete");
- }
- public override void UpdateDpiDependencies()
- {
- base.UpdateDpiDependencies();
- btnUp.Image = GetImage(208);
- btnDown.Image = GetImage(209);
- lbGroups.ItemHeight = this.LogicalToDevice(17);
- }
- public GroupExpertForm(Designer designer)
- {
- this.designer = designer;
- report = designer.ActiveReport;
- page = designer.ActiveReportTab.ActivePage as ReportPage;
- InitializeComponent();
- Init();
- Localize();
- UIUtils.CheckRTL(this);
- UpdateDpiDependencies();
- }
- }
- }
|