diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Xml/MycroWriter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Xml/MycroWriter.cs index ede6c5e903..1fb4aac688 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Xml/MycroWriter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Xml/MycroWriter.cs @@ -31,7 +31,7 @@ namespace ICSharpCode.Reports.Addin public void Save(object obj, XmlWriter writer) { -// System.Console.WriteLine("Save <{0}>",obj.GetType().Name); + System.Console.WriteLine("Save <{0}>",obj.GetType().Name); Type t = obj.GetType(); // writer.WriteStartElement(GetTypeName(t)); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs index 89e6d5218a..92c97a7acb 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs @@ -14,6 +14,7 @@ using System.Linq; using ICSharpCode.Reports.Core.Interfaces; using ICSharpCode.Reports.Core.old_Exporter; +using ICSharpCode.Reports.Expressions.ReportingLanguage; namespace ICSharpCode.Reports.Core { @@ -126,7 +127,28 @@ namespace ICSharpCode.Reports.Core return false; } + + public static IExpressionEvaluatorFacade SetupEvaluator (ISinglePage singlePage,IDataNavigator dataNavigator) + { + if (singlePage == null) { + throw new ArgumentNullException("singlePage"); + } + if (dataNavigator == null) { + throw new ArgumentNullException("dataNavigator"); + } + IExpressionEvaluatorFacade evaluatorFacade = new ExpressionEvaluatorFacade(); + evaluatorFacade.SinglePage = singlePage; + evaluatorFacade.SinglePage.IDataNavigator = dataNavigator; + return evaluatorFacade; + } + + public static IExpressionEvaluatorFacade SetupEvaluator () + { + return new ExpressionEvaluatorFacade(); + } + + #region Debug Code /// diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseReportItem.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseReportItem.cs index 6d1c889bd9..5155dfc2d2 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseReportItem.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseReportItem.cs @@ -76,15 +76,22 @@ namespace ICSharpCode.Reports.Core { } - protected Rectangle DrawingRectangle + public Rectangle DrawingRectangle { get { - return new Rectangle(this.Parent.Location.X + this.Location.X , - this.Location.Y + this.SectionOffset, - this.Size.Width,this.Size.Height); -// return new Rectangle( this.Location.X , -// this.Location.Y + this.SectionOffset, -// this.Size.Width,this.Size.Height); + if (Parent != null) { + + return new Rectangle(this.Parent.Location.X + this.Location.X , + + this.Location.Y + this.SectionOffset, + this.Size.Width,this.Size.Height); + } else { + return new Rectangle(this.Location.X , + this.Location.Y + this.SectionOffset, + this.Size.Width,this.Size.Height); + } + + } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseRowItem.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseRowItem.cs index b1d374a5df..723086b038 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseRowItem.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseRowItem.cs @@ -46,14 +46,6 @@ namespace ICSharpCode.Reports.Core{ style.ForeColor = this.ForeColor; style.FrameColor = this.FrameColor; - /* - if (this.Parent != null) { - Rectangle rect = base.DrawingRectangle; - style.Location = new Point(rect.Left,this.Location.Y); - } else { - style.Location = this.Location; - } - */ style.Location = this.Location; style.Size = this.Size; style.DrawBorder = this.DrawBorder; @@ -77,31 +69,13 @@ namespace ICSharpCode.Reports.Core{ base.FillBackground(rpea.PrintPageEventArgs.Graphics); } - Border b = new Border(new BaseLine (this.FrameColor,System.Drawing.Drawing2D.DashStyle.Solid,1)); base.DrawFrame (rpea.PrintPageEventArgs.Graphics,b); - this.Location = new Point(base.DrawingRectangle.Left,this.Location.Y); - - if ((this.items != null) && (this.items.Count > 0)) { - foreach (BaseReportItem childItem in this.items) { - childItem.Parent = this; - - Point saveloc = new Point (childItem.Location.X,childItem.Location.Y); - - childItem.Location = new Point(childItem.Location.X, - base.DrawingRectangle.Top + childItem.Location.Y); - - - if (this.BackColor != GlobalValues.DefaultBackColor) { - childItem.BackColor = this.BackColor; - } - childItem.Render (rpea); - childItem.Location = saveloc; - } - } + this.Location = point; + base.NotifyAfterPrint (rpea.LocationAfterDraw); } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseTableItem.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseTableItem.cs index b4d1fedc8c..1c9d11eae2 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseTableItem.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseTableItem.cs @@ -172,6 +172,8 @@ namespace ICSharpCode.Reports.Core { } this.startSection = section; } + + public void RenderTable (BaseReportItem parent,SectionBounds sectionBounds,ReportPageEventArgs rpea,ILayouter layouter) { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractDataRenderer.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractDataRenderer.cs index 7ac47f3677..dd8517a59d 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractDataRenderer.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractDataRenderer.cs @@ -61,15 +61,16 @@ namespace ICSharpCode.Reports.Core base.CurrentRow = this.dataNavigator.CurrentRow; ISimpleContainer container = null; bool hasContainer = false; + foreach (BaseReportItem item in this.CurrentSection.Items) { - container = item as ISimpleContainer; + container = item as ISimpleContainer; if (container != null) { hasContainer = true; break; } } if (hasContainer) { - return DoContainerControl(this.CurrentSection,container,rpea); + return RenderSimpleContainer(this.CurrentSection,container,rpea); } else { return base.RenderSection(rpea); @@ -78,9 +79,11 @@ namespace ICSharpCode.Reports.Core } - private Point DoContainerControl (BaseSection section, - ISimpleContainer container, - ReportPageEventArgs rpea) + + + private Point RenderSimpleContainer (BaseSection section, + ISimpleContainer container, + ReportPageEventArgs rpea) { Point drawPoint = Point.Empty; if (section.Visible){ @@ -88,18 +91,32 @@ namespace ICSharpCode.Reports.Core //Always set section.size to it's original value section.Size = this.SectionBounds.DetailSectionRectangle.Size; + Size containerSize = new Size (section.Items[0].Size.Width,section.Items[0].Size.Height); - ISimpleContainer row =(ISimpleContainer) section.Items[0]; - PrintHelper.SetLayoutForRow(rpea.PrintPageEventArgs.Graphics,base.Layout,row); + + PrintHelper.SetLayoutForRow(rpea.PrintPageEventArgs.Graphics,base.Layout,container); + section.Render (rpea); foreach (BaseReportItem item in section.Items) { - if (item.Parent == null) { - item.Parent = section; - } + + item.Parent = section; + item.SectionOffset = section.SectionOffset; + + Point saveLocation = item.Location; + item.Render(rpea); + + item.Location = saveLocation; + + ISimpleContainer cont = item as ISimpleContainer; + + RenderChilds (this.CurrentSection,cont,rpea); + + item.Location = saveLocation; + drawPoint = new Point(item.Location.X, section.SectionOffset + section.Size.Height); rpea.LocationAfterDraw = new Point (rpea.LocationAfterDraw.X,section.SectionOffset + section.Size.Height); @@ -116,6 +133,49 @@ namespace ICSharpCode.Reports.Core return drawPoint; } + + + void RenderChilds (BaseReportItem parent,ISimpleContainer simpleContainer,ReportPageEventArgs rpea) + { + + if (simpleContainer != null) { + + BaseReportItem item = simpleContainer as BaseReportItem; + + if ((simpleContainer.Items != null) && (simpleContainer.Items.Count > 0)) { + + foreach (BaseReportItem child in simpleContainer.Items) { + child.Parent = item; + + Point saveLocation = new Point (child.Location.X,child.Location.Y); + + + child.Location = new Point(parent.Location.X + simpleContainer.Location.X + child.Location.X, + item.SectionOffset + item.Location.Y + child.Location.Y); + + + if (item.BackColor != GlobalValues.DefaultBackColor) { + child.BackColor = item.BackColor; + } + + BaseTextItem textItem = child as BaseTextItem; + + if (textItem != null) { + string str = textItem.Text; + textItem.Text = Evaluator.Evaluate(textItem.Text); + textItem.Render(rpea); + textItem.Text = str; + } else { + child.Render (rpea); + } + child.Location = saveLocation; + } + } + + } + } + + #region Properties protected IDataManager DataManager diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractRenderer.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractRenderer.cs index cd67fb50bf..4686e624b9 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractRenderer.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractRenderer.cs @@ -35,7 +35,7 @@ namespace ICSharpCode.Reports.Core private int currentPageNumber; - private IExpressionEvaluatorFacade expressionFassade; + //private IExpressionEvaluatorFacade expressionFassade; private ILayouter layout; private IReportModel reportModel; @@ -88,7 +88,8 @@ namespace ICSharpCode.Reports.Core this.reportDocument.RenderDetails += new EventHandler (PrintDetail); this.reportDocument.RenderPageEnd += new EventHandler (PrintPageEnd); this.reportDocument.RenderReportEnd += new EventHandler (PrintReportFooter); - this.expressionFassade = new ExpressionEvaluatorFacade(); + + this.Evaluator = PrintHelper.SetupEvaluator(); } @@ -212,7 +213,7 @@ namespace ICSharpCode.Reports.Core if (this.CurrentSection.Visible){ this.CurrentSection.Render (rpea); - expressionFassade.SinglePage = this.reportDocument.SinglePage; + Evaluator.SinglePage = this.reportDocument.SinglePage; if (this.CurrentSection.Items.Count > 0) { @@ -238,7 +239,7 @@ namespace ICSharpCode.Reports.Core BaseTextItem bti = item as BaseTextItem; if (bti != null) { - bti.Text = expressionFassade.Evaluate(bti.Text); + bti.Text = Evaluator.Evaluate(bti.Text); } item.Render(rpea); drawPoint = new Point(this.CurrentSection.Location.X, @@ -321,7 +322,7 @@ namespace ICSharpCode.Reports.Core protected SectionBounds SectionBounds { get {return this.SinglePage.SectionBounds;}} - protected IExpressionEvaluatorFacade ExpressionFassade {get { return expressionFassade; }} + protected IExpressionEvaluatorFacade Evaluator {get;set;} protected ILayouter Layout {get {return this.layout;}} diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs index 26af81f0dd..dfd6c2d6d1 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs @@ -156,14 +156,17 @@ namespace ICSharpCode.Reports.Core { if (tableContainer != null) { tableContainer.DataNavigator = nav; tableContainer.Parent = base.CurrentSection; - tableContainer.ExpressionEvaluatorFacade = base.ExpressionFassade; + tableContainer.ExpressionEvaluatorFacade = base.Evaluator; if (rpea.SinglePage.PageNumber == 1) { tableContainer.StartLayoutAt(base.Sections[2]); } else { tableContainer.StartLayoutAt(base.Sections[0]); } +// base.RenderTable(base.CurrentSection,this.SectionBounds,rpea,this.Layout); + tableContainer.RenderTable(base.CurrentSection,this.SectionBounds,rpea,this.Layout); + this.ReportDocument.DetailsDone = true; } @@ -175,9 +178,9 @@ namespace ICSharpCode.Reports.Core { } do { - ISimpleContainer i = base.CurrentSection.Items[0] as ISimpleContainer; - if (i != null) { - nav.Fill (i.Items); + ISimpleContainer simpleContainer = base.CurrentSection.Items[0] as ISimpleContainer; + if (simpleContainer != null) { + nav.Fill (simpleContainer.Items); } else { nav.Fill (base.CurrentSection.Items); } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/BaseConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/BaseConverter.cs index 7cb1e16be9..681ad58d44 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/BaseConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/old_Exporter/Converters/BaseConverter.cs @@ -29,7 +29,7 @@ namespace ICSharpCode.Reports.Core.old_Exporter private IExportItemsConverter exportItemsConverter; private ILayouter layouter; private Size saveSize; - IExpressionEvaluatorFacade evaluator; + private IExpressionEvaluatorFacade evaluator; public event EventHandler PageFull; public event EventHandler SectionRendering; @@ -55,17 +55,10 @@ namespace ICSharpCode.Reports.Core.old_Exporter this.sectionBounds = this.singlePage.SectionBounds; this.exportItemsConverter = exportItemsConverter; this.layouter = layouter; - this.evaluator = SetupEvaluator (); + this.evaluator = PrintHelper.SetupEvaluator(this.singlePage,this.dataNavigator); } - private IExpressionEvaluatorFacade SetupEvaluator () - { - IExpressionEvaluatorFacade evaluatorFacade = new ExpressionEvaluatorFacade(); - evaluatorFacade.SinglePage = this.singlePage; - evaluatorFacade.SinglePage.IDataNavigator = this.dataNavigator; - return evaluatorFacade; - } - + protected void FirePageFull (ExporterCollection items) { EventHelper.Raise(PageFull,this,new NewPageEventArgs(items));