From 0da20d96e643463164a2f476d2a4127b559fbd7d Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Wed, 2 Mar 2011 19:49:34 +0100 Subject: [PATCH] Rows can be used as StackPanel.Orientation=horizontal, PageHeader can display a List of rows --- .../BaseClasses/Printing/LayoutHelper.cs | 13 +++- .../Project/BaseClasses/Printing/Layouter.cs | 4 +- .../BaseClasses/Printing/StandardPrinter.cs | 4 +- .../Project/BaseClasses/SectionBounds.cs | 2 +- .../Project/Exporter/BasePager.cs | 69 +++++++++---------- .../Project/Exporter/DataPageBuilder.cs | 5 +- .../Project/Expressions/EvaluationHelper.cs | 18 +++++ 7 files changed, 74 insertions(+), 41 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/LayoutHelper.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/LayoutHelper.cs index 979fe90cee..9ba54fb1c7 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/LayoutHelper.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/LayoutHelper.cs @@ -16,7 +16,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing internal sealed class LayoutHelper { - public static Rectangle FixSectionLayout(Graphics graphics,BaseSection section) + public static Rectangle CalculateSectionLayout(Graphics graphics,BaseSection section) { ILayouter layouter = (ILayouter)ServiceContainer.GetService(typeof(ILayouter)); var desiredRectangle = layouter.Layout(graphics, section); @@ -24,6 +24,17 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing } + public static void FixSectionLayout(Rectangle desiredRectangle, BaseSection section) + { + Rectangle sectionRectangle = new Rectangle(section.Location, section.Size); + if (!sectionRectangle.Contains(desiredRectangle)) { + section.Size = new Size(section.Size.Width, + desiredRectangle.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom); + } + } + + + public static void SetLayoutForRow (Graphics graphics, ILayouter layouter,ISimpleContainer row) { Rectangle textRect = layouter.Layout(graphics,row); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/Layouter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/Layouter.cs index 857c44b5b5..7f28554bea 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/Layouter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/Layouter.cs @@ -32,7 +32,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing } // Console.WriteLine("\tlayouter for container <{0}>",container.ToString()); - Console.WriteLine("\tLayouter for Container"); +// Console.WriteLine("\tLayouter for Container"); Rectangle desiredContainerRectangle = new Rectangle (container.Location,container.Size); System.Collections.Generic.IEnumerable canGrowShrinkCollection = from bt in container.Items where bt.CanGrow == true select bt; @@ -71,7 +71,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing } // Console.WriteLine("\tLayouter for Container");Console.WriteLine("\tlayouter for section <{0}>",section.Name); - Console.WriteLine("\tLayouter for Section"); +// Console.WriteLine("\tLayouter for Section"); IEnumerable canGrowShrinkCollection = from bt in section.Items where bt.CanGrow == true select bt; Rectangle desiredSectionRectangle = new Rectangle(section.Location.X, diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs index 7d83af3131..6986b7505f 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs @@ -224,7 +224,9 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing lineItem.StyleDecorator.Size); AdjustBackColor (container); - return lineItem; + Console.WriteLine("\tstart container at {0}",lineItem.StyleDecorator.Location); + return lineItem; + } return null; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SectionBounds.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SectionBounds.cs index 66fa8c5a85..52567fd7c7 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SectionBounds.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SectionBounds.cs @@ -96,7 +96,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses throw new ArgumentNullException("section"); } - section.SectionOffset = this.reportHeaderRectangle.Bottom + + 3 * GlobalValues.GapBetweenContainer; + section.SectionOffset = this.reportHeaderRectangle.Bottom + 3 * GlobalValues.GapBetweenContainer; this.pageHeaderRectangle = new Rectangle (this.reportHeaderRectangle.Left, section.SectionOffset, this.marginBounds.Width, diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs index 637b77e14e..887578c2fb 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs @@ -85,74 +85,74 @@ namespace ICSharpCode.Reports.Core.Exporter #region Converters + //Point currentPosition = Point.Empty; + protected Point Offset {get;set;} protected ExporterCollection ConvertSection (BaseSection section,int dataRow) { FireSectionRenderEvent (section ,dataRow); - + Console.WriteLine(""); + Console.WriteLine("section {0}",section.Name); PrintHelper.AdjustParent((BaseSection)section,section.Items); var list = new ExporterCollection(); + Offset = new Point(section.Location.X,section.SectionOffset); if (section.Items.Count > 0) { section.Items.SortByLocation(); - var offset = new Point(section.Location.X,section.SectionOffset); - IExpressionEvaluatorFacade f = EvaluationHelper.CreateEvaluator(this.SinglePage,this.SinglePage.IDataNavigator); + IExpressionEvaluatorFacade evaluator = EvaluationHelper.CreateEvaluator(this.SinglePage,this.SinglePage.IDataNavigator); - Rectangle desiredRectangle = LayoutHelper.FixSectionLayout(this.Graphics,section); - - Setlayout( desiredRectangle, section); + Rectangle desiredRectangle = LayoutHelper.CalculateSectionLayout(this.Graphics,section); + LayoutHelper.FixSectionLayout(desiredRectangle,section); - foreach (BaseReportItem item in section.Items) { - + foreach (BaseReportItem item in section.Items) + { ISimpleContainer simpleContainer = item as ISimpleContainer; - if (simpleContainer != null) { - foreach (BaseTextItem v in simpleContainer.Items) - { - string ss = f.Evaluate(v.Text); - v.Text = ss; - } + EvaluationHelper.EvaluateReportItems(evaluator,simpleContainer.Items); Size s = simpleContainer.Size; var l = (ILayouter)ServiceContainer.GetService(typeof(ILayouter)); LayoutHelper.SetLayoutForRow(Graphics,l, simpleContainer); - ExportContainer exportContainer = StandardPrinter.ConvertToContainer(simpleContainer,offset); +ExportContainer exportContainer = StandardPrinter.ConvertToContainer(simpleContainer,Offset); + Console.WriteLine ("offset {0}",Offset); +Console.WriteLine("start exportContainer container at {0} with height {1}",exportContainer.StyleDecorator.Location,exportContainer.StyleDecorator.Size.Height); s = simpleContainer.Size; - + ExporterCollection clist = StandardPrinter.ConvertPlainCollection(simpleContainer.Items,exportContainer.StyleDecorator.Location); exportContainer.Items.AddRange(clist); list.Add(exportContainer); - offset = new Point(offset.X,offset.Y + simpleContainer.Size.Height + 4* GlobalValues.GapBetweenContainer); + Offset = new Point(Offset.X,Offset.Y + exportContainer.StyleDecorator.Size.Height); + +Console.WriteLine ("new offset {0}",Offset); + - foreach (ExportText VARIABLE in clist) - { - Console.WriteLine("{0} - {1}",VARIABLE.Text,VARIABLE.StyleDecorator.Location); - } - Console.WriteLine("......."); +// foreach (ExportText VARIABLE in clist) +// { +// Console.WriteLine("{0} - {1}",VARIABLE.Text,VARIABLE.StyleDecorator.Location); +// } +// Console.WriteLine("......."); - } else { - list = StandardPrinter.ConvertPlainCollection(section.Items,offset); } + else + { + Console.WriteLine("start section {0} at {1}",section.Name,section.SectionOffset + section.Location.Y); + list = StandardPrinter.ConvertPlainCollection(section.Items,Offset); + Offset = new Point(Offset.X,Offset.Y + section.Size.Height); + } + section.Size = new Size(section.Size.Width,section.Size.Height); } + Console.WriteLine ("\toffset {0} sectionoffset {1}",Offset,section.SectionOffset); + } + Console.WriteLine ("Cuurent location {0} section.botom {1}",Offset,section.Location.Y + section.Size.Height); return list; } - - void Setlayout(Rectangle desiredRectangle, BaseSection section) - { - Rectangle sectionRectangle = new Rectangle(section.Location, section.Size); - if (!sectionRectangle.Contains(desiredRectangle)) { - section.Size = new Size(section.Size.Width, - desiredRectangle.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom); - } - } - public static BaseRectangleItem CreateDebugItem (BaseReportItem item) { @@ -164,7 +164,6 @@ namespace ICSharpCode.Reports.Core.Exporter return debugRectangle; } - #endregion diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs index 0d3f84034d..caf832f561 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs @@ -78,9 +78,12 @@ namespace ICSharpCode.Reports.Core.Exporter protected override void BuildPageHeader () { base.ReportModel.PageHeader.SectionOffset = base.AdjustPageHeader(); - + Console.WriteLine ("pageHeader {0}",base.ReportModel.PageHeader.Size); ExporterCollection convertedList = base.ConvertSection (base.ReportModel.PageHeader,this.dataNavigator.CurrentRow); + Console.WriteLine ("pageHeader {0}",base.ReportModel.PageHeader.Size); +// base.ReportModel.PageHeader.Size = new Size(base.ReportModel.PageHeader.Size.Width,base.Offset.Y); base.SectionBounds.MeasurePageHeader(base.ReportModel.PageHeader); + Console.WriteLine ("rect {0} detail {1}",base.SectionBounds.PageHeaderRectangle,base.SectionBounds.DetailStart); base.SinglePage.Items.AddRange(convertedList); } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/EvaluationHelper.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/EvaluationHelper.cs index 57ec0a0e62..70635380e2 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/EvaluationHelper.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/EvaluationHelper.cs @@ -42,6 +42,24 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage } + public static void EvaluateReportItems (IExpressionEvaluatorFacade evaluator,ReportItemCollection items) + { + try { + foreach(BaseReportItem column in items) { + var container = column as ISimpleContainer ; + if (container != null) { + EvaluateReportItems(evaluator,container.Items); + } + BaseTextItem textItem = column as BaseTextItem; + if (textItem != null) { + textItem.Text = evaluator.Evaluate(textItem.Text); + } + } + } catch (Exception) { + throw ; + } + } + public static void EvaluateRow(IExpressionEvaluatorFacade evaluator,ExporterCollection row) { try {