123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505 |
- using System;
- using System.Drawing;
- using System.Windows.Forms;
- using FastReport.Utils;
- using FastReport.Design;
- namespace FastReport.Forms
- {
- internal partial class ConfigureBandsForm : BaseDialogForm
- {
- private Designer designer;
- private ReportPage page;
- private BandBase lastSelectedBand;
- public ReportPage Page
- {
- get { return page; }
- set
- {
- page = value;
- UpdateBands();
- }
- }
- private TreeNodeCollection AddBand(BandBase band, TreeNodeCollection nodes)
- {
- if (band != null)
- {
- ObjectInfo info = RegisteredObjects.FindObject(band);
- string infoText = Res.Get(info.Text);
- infoText += ": " + band.Name;
- if (band is DataBand || band is GroupHeaderBand)
- {
- if (!String.IsNullOrEmpty(band.GetInfoText()))
- infoText += " (" + band.GetInfoText() + ")";
- }
- TreeNode node = nodes.Add(infoText);
- int imageIndex = info.ImageIndex;
- node.ImageIndex = imageIndex;
- node.SelectedImageIndex = imageIndex;
- node.Tag = band;
- if (band == lastSelectedBand)
- tvBands.SelectedNode = node;
- AddBand(band.Child, node.Nodes);
- return node.Nodes;
- }
- return null;
- }
- private void EnumDataBand(DataBand band, TreeNodeCollection nodes)
- {
- if (band == null)
- return;
- AddBand(band.Header, nodes);
- TreeNodeCollection dataNodes = AddBand(band, nodes);
- foreach (BandBase b in band.Bands)
- {
- EnumBand(b, dataNodes);
- }
- AddBand(band.Footer, nodes);
- }
- private void EnumGroupHeaderBand(GroupHeaderBand band, TreeNodeCollection nodes)
- {
- if (band == null)
- return;
- AddBand(band.Header, nodes);
- TreeNodeCollection groupNodes = AddBand(band, nodes);
- EnumGroupHeaderBand(band.NestedGroup, groupNodes);
- EnumDataBand(band.Data, groupNodes);
- AddBand(band.GroupFooter, nodes);
- AddBand(band.Footer, nodes);
- }
- private void EnumBand(BandBase band, TreeNodeCollection nodes)
- {
- if (band is DataBand)
- EnumDataBand(band as DataBand, nodes);
- else if (band is GroupHeaderBand)
- EnumGroupHeaderBand(band as GroupHeaderBand, nodes);
- }
- private void EnumBands(TreeNodeCollection nodes)
- {
- if (Page.TitleBeforeHeader)
- {
- AddBand(Page.ReportTitle, nodes);
- AddBand(Page.PageHeader, nodes);
- }
- else
- {
- AddBand(Page.PageHeader, nodes);
- AddBand(Page.ReportTitle, nodes);
- }
- AddBand(Page.ColumnHeader, nodes);
- foreach (BandBase b in Page.Bands)
- {
- EnumBand(b, nodes);
- }
- AddBand(Page.ColumnFooter, nodes);
- AddBand(Page.ReportSummary, nodes);
- AddBand(Page.PageFooter, nodes);
- AddBand(Page.Overlay, nodes);
- }
- private void SetDefaults(BandBase band)
- {
- band.CreateUniqueName();
- band.Height = band.GetPreferredSize().Height;
- }
- private void Change()
- {
- UpdateBands();
- UpdateControls();
- designer.SetModified(null, "ChangeReport");
- }
- private void btnAdd_Click(object sender, EventArgs e)
- {
- miDelete.Visible = false;
- sep1.Visible = false;
- mnuBands.Show(btnAdd.PointToScreen(new Point(0, btnAdd.Height)));
- }
- private void btnDelete_Click(object sender, EventArgs e)
- {
- BandBase band = tvBands.SelectedNode.Tag as BandBase;
- band.Delete();
- tvBands.SelectedNode = tvBands.SelectedNode.NextVisibleNode;
- Change();
- }
- private void btnUp_Click(object sender, EventArgs e)
- {
- BandBase band = tvBands.SelectedNode.Tag as BandBase;
- if (band.Parent == Page || band is DataBand)
- band.ZOrder--;
- else if (band is ChildBand && band.Parent is ChildBand)
- {
- ChildBand parent = band.Parent as ChildBand;
- BandBase newParent = parent.Parent as BandBase;
- parent.Parent = null;
- band.Parent = newParent;
- parent.Child = band.Child;
- band.Child = parent;
- }
- else if (band is GroupHeaderBand && band.Parent is GroupHeaderBand)
- {
- GroupHeaderBand group = band as GroupHeaderBand;
- GroupHeaderBand parent = band.Parent as GroupHeaderBand;
- Base newParent = parent.Parent;
- BandBase child = null;
- if (group.Data != null)
- child = group.Data;
- else
- child = group.NestedGroup;
- int zOrder = parent.ZOrder;
- parent.Parent = null;
- group.Parent = newParent;
- group.ZOrder = zOrder;
- child.Parent = parent;
- parent.Parent = group;
- }
- Change();
- }
- private void btnDown_Click(object sender, EventArgs e)
- {
- BandBase band = tvBands.SelectedNode.Tag as BandBase;
- if (band.Parent == Page || band is DataBand)
- band.ZOrder += 2;
- else if (band is ChildBand && band.Child != null)
- {
- BandBase parent = band.Parent as BandBase;
- ChildBand child = band.Child;
- band.Parent = null;
- child.Parent = parent;
- band.Child = child.Child;
- band.Parent = child;
- }
- else if (band is GroupHeaderBand && (band as GroupHeaderBand).NestedGroup != null)
- {
- GroupHeaderBand group = band as GroupHeaderBand;
- Base parent = band.Parent;
- GroupHeaderBand child = group.NestedGroup;
- int zOrder = group.ZOrder;
- group.Parent = null;
- child.Parent = parent;
- child.ZOrder = zOrder;
- if (child.Data != null)
- group.Data = child.Data;
- else
- group.NestedGroup = child.NestedGroup;
- group.Parent = child;
- }
- Change();
- }
- private void tvBands_AfterSelect(object sender, TreeViewEventArgs e)
- {
- UpdateControls();
- }
- private void tvBands_MouseDown(object sender, MouseEventArgs e)
- {
- tvBands.SelectedNode = tvBands.GetNodeAt(e.Location);
- UpdateControls();
- }
- private void tvBands_MouseUp(object sender, MouseEventArgs e)
- {
- if (e.Button == MouseButtons.Right)
- {
- miDelete.Visible = true;
- sep1.Visible = true;
- mnuBands.Show(tvBands.PointToScreen(e.Location));
- }
- }
- private void miPageHeader_Click(object sender, EventArgs e)
- {
- Page.PageHeader = new PageHeaderBand();
- SetDefaults(Page.PageHeader);
- Change();
- }
- private void miReportTitle_Click(object sender, EventArgs e)
- {
- Page.ReportTitle = new ReportTitleBand();
- SetDefaults(Page.ReportTitle);
- Change();
- }
- private void miColumnHeader_Click(object sender, EventArgs e)
- {
- Page.ColumnHeader = new ColumnHeaderBand();
- SetDefaults(Page.ColumnHeader);
- Change();
- }
- private void miDataHeader_Click(object sender, EventArgs e)
- {
- if (tvBands.SelectedNode.Tag is DataBand)
- {
- DataBand data = tvBands.SelectedNode.Tag as DataBand;
- data.Header = new DataHeaderBand();
- SetDefaults(data.Header);
- }
- else if (tvBands.SelectedNode.Tag is GroupHeaderBand)
- {
- GroupHeaderBand group = tvBands.SelectedNode.Tag as GroupHeaderBand;
- group.Header = new DataHeaderBand();
- SetDefaults(group.Header);
- }
- Change();
- }
- private void miData_Click(object sender, EventArgs e)
- {
- BandBase band = tvBands.SelectedNode != null ? tvBands.SelectedNode.Tag as BandBase : null;
- DataBand newBand = new DataBand();
- if (band is DataBand)
- (band as DataBand).Bands.Add(newBand);
- else
- Page.Bands.Add(newBand);
- SetDefaults(newBand);
- Change();
- }
- private void miGroup_Click(object sender, EventArgs e)
- {
- BandBase band = tvBands.SelectedNode != null ? tvBands.SelectedNode.Tag as BandBase : null;
- GroupHeaderBand group = new GroupHeaderBand();
- // if we select something other than databand or a group, add a group to the first page databand.
- if (!(band is DataBand) && !(band is GroupHeaderBand))
- {
- foreach (BandBase b in Page.Bands)
- {
- if (b is DataBand)
- {
- band = b;
- break;
- }
- }
- }
- if (band is GroupHeaderBand)
- {
- GroupHeaderBand parent = band as GroupHeaderBand;
- if (parent.Data != null)
- {
- group.Data = parent.Data;
- parent.NestedGroup = group;
- }
- else if (parent.NestedGroup != null)
- {
- group.NestedGroup = parent.NestedGroup;
- parent.NestedGroup = group;
- }
- }
- else if (band is DataBand)
- {
- if (band.Parent is GroupHeaderBand)
- {
- GroupHeaderBand parent = band.Parent as GroupHeaderBand;
- group.Data = band as DataBand;
- parent.NestedGroup = group;
- }
- else
- {
- int zOrder = band.ZOrder;
- Base parent = band.Parent;
- group.Data = band as DataBand;
- group.Parent = parent;
- group.ZOrder = zOrder;
- }
- }
- else
- {
- Page.Bands.Add(group);
- group.Data = new DataBand();
- SetDefaults(group.Data);
- }
- SetDefaults(group);
- group.GroupFooter = new GroupFooterBand();
- SetDefaults(group.GroupFooter);
- Change();
- }
- private void miChild_Click(object sender, EventArgs e)
- {
- BandBase band = tvBands.SelectedNode.Tag as BandBase;
- band.Child = new ChildBand();
- SetDefaults(band.Child);
- Change();
- }
- private void miDataFooter_Click(object sender, EventArgs e)
- {
- if (tvBands.SelectedNode.Tag is DataBand)
- {
- DataBand data = tvBands.SelectedNode.Tag as DataBand;
- data.Footer = new DataFooterBand();
- SetDefaults(data.Footer);
- }
- else if (tvBands.SelectedNode.Tag is GroupHeaderBand)
- {
- GroupHeaderBand group = tvBands.SelectedNode.Tag as GroupHeaderBand;
- group.Footer = new DataFooterBand();
- SetDefaults(group.Footer);
- }
- Change();
- }
- private void miGroupFooter_Click(object sender, EventArgs e)
- {
- GroupHeaderBand groupHeader = tvBands.SelectedNode.Tag as GroupHeaderBand;
- groupHeader.GroupFooter = new GroupFooterBand();
- SetDefaults(groupHeader.GroupFooter);
- Change();
- }
- private void miColumnFooter_Click(object sender, EventArgs e)
- {
- Page.ColumnFooter = new ColumnFooterBand();
- SetDefaults(Page.ColumnFooter);
- Change();
- }
- private void miReportSummary_Click(object sender, EventArgs e)
- {
- Page.ReportSummary = new ReportSummaryBand();
- SetDefaults(Page.ReportSummary);
- Change();
- }
- private void miPageFooter_Click(object sender, EventArgs e)
- {
- Page.PageFooter = new PageFooterBand();
- SetDefaults(Page.PageFooter);
- Change();
- }
- private void miOverlay_Click(object sender, EventArgs e)
- {
- Page.Overlay = new OverlayBand();
- SetDefaults(Page.Overlay);
- Change();
- }
- private void UpdateBands()
- {
- lastSelectedBand = tvBands.SelectedNode != null ? tvBands.SelectedNode.Tag as BandBase : null;
- tvBands.BeginUpdate();
- tvBands.Nodes.Clear();
- EnumBands(tvBands.Nodes);
- tvBands.ExpandAll();
- tvBands.EndUpdate();
- if (lastSelectedBand == null && tvBands.Nodes.Count > 0)
- tvBands.SelectedNode = tvBands.Nodes[0];
- }
- private void UpdateControls()
- {
- BandBase selected = tvBands.SelectedNode != null ? tvBands.SelectedNode.Tag as BandBase : null;
- bool isSubreport = Page.Subreport != null;
- miPageHeader.Enabled = Page.PageHeader == null && !isSubreport;
- miReportTitle.Enabled = Page.ReportTitle == null && !isSubreport;
- miColumnHeader.Enabled = Page.ColumnHeader == null && !isSubreport;
- miDataHeader.Enabled = (selected is DataBand && (selected as DataBand).Header == null) ||
- (selected is GroupHeaderBand && (selected as GroupHeaderBand).Header == null);
- miDataFooter.Enabled = (selected is DataBand && (selected as DataBand).Footer == null) ||
- (selected is GroupHeaderBand && (selected as GroupHeaderBand).Footer == null);
- miGroupFooter.Enabled = selected is GroupHeaderBand && (selected as GroupHeaderBand).GroupFooter == null;
- miColumnFooter.Enabled = Page.ColumnFooter == null && !isSubreport;
- miReportSummary.Enabled = Page.ReportSummary == null && !isSubreport;
- miPageFooter.Enabled = Page.PageFooter == null && !isSubreport;
- miChild.Enabled = selected != null && selected.Child == null;
- miOverlay.Enabled = Page.Overlay == null && !isSubreport;
- btnUp.Enabled = selected is GroupHeaderBand || selected is DataBand || selected is ChildBand;
- btnDown.Enabled = btnUp.Enabled;
- btnDelete.Enabled = selected != null && !(selected is DataBand && selected.Parent is GroupHeaderBand);
- miDelete.Enabled = btnDelete.Enabled;
- designer.CancelPaste();
- designer.SelectedObjects.Clear();
- designer.SelectedObjects.Add(selected);
- designer.SelectionChanged(null);
- }
- private void ConfigureBandsForm_FormClosing(object sender, FormClosingEventArgs e)
- {
- Config.SaveFormState(this);
- }
- public override void Localize()
- {
- base.Localize();
- MyRes res = new MyRes("Forms,ConfigureBands");
- MyRes res1 = new MyRes("Objects,Bands");
- Text = res.Get("");
- btnAdd.Text = res.Get("Add");
- btnDelete.Text = res.Get("Delete");
- btnOk.Text = Res.Get("Buttons,Close");
- miDelete.Text = res.Get("Delete");
- miPageHeader.Text = res1.Get("PageHeader");
- miReportTitle.Text = res1.Get("ReportTitle");
- miColumnHeader.Text = res1.Get("ColumnHeader");
- miDataHeader.Text = res1.Get("DataHeader");
- miData.Text = res1.Get("Data");
- miGroup.Text = res1.Get("GroupHeader");
- miDataFooter.Text = res1.Get("DataFooter");
- miGroupFooter.Text = res1.Get("GroupFooter");
- miColumnFooter.Text = res1.Get("ColumnFooter");
- miReportSummary.Text = res1.Get("ReportSummary");
- miPageFooter.Text = res1.Get("PageFooter");
- miChild.Text = res1.Get("Child");
- miOverlay.Text = res1.Get("Overlay");
- }
- public override void UpdateDpiDependencies()
- {
- base.UpdateDpiDependencies();
- tvBands.ImageList = GetImages();
- mnuBands.Font = Font;
-
- miDelete.Image = GetImage(51);
- btnUp.Image = GetImage(208);
- btnDown.Image = GetImage(209);
- miPageHeader.Image = GetImage(156);
- miReportTitle.Image = GetImage(154);
- miColumnHeader.Image = GetImage(158);
- miDataHeader.Image = GetImage(160);
- miData.Image = GetImage(162);
- miGroup.Image = GetImage(163);
- miDataFooter.Image = GetImage(161);
- miGroupFooter.Image = GetImage(164);
- miColumnFooter.Image = GetImage(159);
- miReportSummary.Image = GetImage(155);
- miPageFooter.Image = GetImage(157);
- miChild.Image = GetImage(165);
- miOverlay.Image = GetImage(166);
- MinimumSize = this.LogicalToDevice(new Size(380, 300));
- }
- public ConfigureBandsForm(Designer designer)
- {
- this.designer = designer;
- InitializeComponent();
- Localize();
- mnuBands.Renderer = Config.DesignerSettings.ToolStripRenderer;
- Config.RestoreFormState(this);
- UIUtils.CheckRTL(this);
- UpdateDpiDependencies();
- }
- }
- }
|