Browse Source

Remove double use of ReportModel in DataPageBuilder.cs and Converters/BaseConverter.cs

pull/15/head^2
peterforstmeier 14 years ago
parent
commit
f92fc980aa
  1. 59
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SectionBounds.cs
  2. 5
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs
  3. 9
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs
  4. 27
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs
  5. 9
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/ConverterFactory.cs
  6. 32
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs
  7. 8
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs
  8. 16
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs
  9. 10
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/Printing/SectionBoundFixture.cs

59
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SectionBounds.cs

@ -20,7 +20,6 @@ namespace ICSharpCode.Reports.Core.BaseClasses
Rectangle ReportFooterRectangle {get;set;} Rectangle ReportFooterRectangle {get;set;}
Rectangle DetailSectionRectangle{get;set;} Rectangle DetailSectionRectangle{get;set;}
Point DetailStart {get;} Point DetailStart {get;}
Point DetailEnds {get;}
Rectangle DetailArea {get;} Rectangle DetailArea {get;}
Size PageSize {get;set;} Size PageSize {get;set;}
bool Landscape{get;} bool Landscape{get;}
@ -34,8 +33,6 @@ namespace ICSharpCode.Reports.Core.BaseClasses
Rectangle pageFooterRectangle; Rectangle pageFooterRectangle;
Rectangle reportFooterRectangle; Rectangle reportFooterRectangle;
Rectangle marginBounds; Rectangle marginBounds;
Rectangle detailArea;
bool firstPage; bool firstPage;
bool landscape; bool landscape;
@ -93,8 +90,6 @@ namespace ICSharpCode.Reports.Core.BaseClasses
{ {
Size size = Size.Empty; Size size = Size.Empty;
if (section.Items.Count > 0) { if (section.Items.Count > 0) {
// size = new Size(this.marginBounds.Width, section.Size.Height + 3 * GlobalValues.GapBetweenContainer);
// size = new Size(this.marginBounds.Width, section.Size.Height + GlobalValues.GapBetweenContainer);
size = new Size(this.marginBounds.Width, section.Size.Height); size = new Size(this.marginBounds.Width, section.Size.Height);
} else { } else {
size = new Size(this.marginBounds.Width, 0); size = new Size(this.marginBounds.Width, 0);
@ -110,32 +105,13 @@ namespace ICSharpCode.Reports.Core.BaseClasses
throw new ArgumentNullException("section"); throw new ArgumentNullException("section");
} }
// section.SectionOffset = this.reportHeaderRectangle.Bottom + 3 * GlobalValues.GapBetweenContainer;
section.SectionOffset = this.reportHeaderRectangle.Bottom + GlobalValues.GapBetweenContainer; section.SectionOffset = this.reportHeaderRectangle.Bottom + GlobalValues.GapBetweenContainer;
Size s = CalculateSize(section); Size s = CalculateSize(section);
/*
this.pageHeaderRectangle = new Rectangle (this.reportHeaderRectangle.Left,
section.SectionOffset,
this.marginBounds.Width,
section.Size.Height + 3 * GlobalValues.GapBetweenContainer);
*/
// this.pageHeaderRectangle = new Rectangle (this.reportHeaderRectangle.Left,
// section.SectionOffset,
// this.marginBounds.Width,
// section.Size.Height);
this.pageHeaderRectangle = new Rectangle (this.reportHeaderRectangle.Left, this.pageHeaderRectangle = new Rectangle (this.reportHeaderRectangle.Left,
section.SectionOffset, section.SectionOffset,
this.marginBounds.Width, this.marginBounds.Width,
s.Height); s.Height);
// Console.WriteLine("---------------");
// Console.WriteLine("\tMeasureReprtHeader {0}",reportHeaderRectangle);
// Console.WriteLine("\tMeasurePageHeader {0}",pageHeaderRectangle);
// Console.WriteLine("\tDetailStart {0}",DetailStart);
// Console.WriteLine("---------------");
} }
@ -159,13 +135,6 @@ namespace ICSharpCode.Reports.Core.BaseClasses
if (section == null) { if (section == null) {
throw new ArgumentNullException("section"); throw new ArgumentNullException("section");
} }
// The reportFooter is set On Top of PageFooter
// this.reportFooterRectangle = new Rectangle (this.printableArea.Left,
// this.PageFooterRectangle.Top - section.Size.Height ,
// this.marginBounds.Width,
// section.Size.Height);
this.reportFooterRectangle = new Rectangle (this.printableArea.Left, this.reportFooterRectangle = new Rectangle (this.printableArea.Left,
this.PageFooterRectangle.Top - section.Size.Height - GlobalValues.GapBetweenContainer, this.PageFooterRectangle.Top - section.Size.Height - GlobalValues.GapBetweenContainer,
this.marginBounds.Width, this.marginBounds.Width,
@ -173,18 +142,6 @@ namespace ICSharpCode.Reports.Core.BaseClasses
section.SectionOffset = this.reportFooterRectangle.Top; section.SectionOffset = this.reportFooterRectangle.Top;
} }
//Test
/*
public void MeasureDetailArea ()
{
this.detailArea = new Rectangle (this.DetailStart.X,
this.DetailStart.Y,
this.pageHeaderRectangle.Width,
(this.pageFooterRectangle.Top -1) - (this.pageHeaderRectangle.Bottom + 1));
}
*/
#endregion #endregion
#region Properties #region Properties
@ -239,24 +196,11 @@ namespace ICSharpCode.Reports.Core.BaseClasses
public Point DetailStart public Point DetailStart
{ {
get { get {
// return new Point(this.pageHeaderRectangle.Left,
// this.pageHeaderRectangle.Bottom + 3 * );
return new Point(this.pageHeaderRectangle.Left, return new Point(this.pageHeaderRectangle.Left,
this.pageHeaderRectangle.Bottom + GlobalValues.GapBetweenContainer ); this.pageHeaderRectangle.Bottom + GlobalValues.GapBetweenContainer );
} }
} }
//Test
public Point DetailEnds
{
get {
// return new Point(this.pageFooterRectangle.Left,this.pageFooterRectangle.Top - 3 * GlobalValues.GapBetweenContainer);
return new Point(this.pageFooterRectangle.Left,this.pageFooterRectangle.Top - GlobalValues.GapBetweenContainer);
}
}
/// <summary> /// <summary>
/// This rectangle starts directly after PageHeader and ends bevore PageFooter /// This rectangle starts directly after PageHeader and ends bevore PageFooter
/// </summary> /// </summary>
@ -266,7 +210,8 @@ namespace ICSharpCode.Reports.Core.BaseClasses
public Rectangle DetailArea public Rectangle DetailArea
{ {
get { get {
return this.detailArea; return new Rectangle (new Point (pageHeaderRectangle.X,pageHeaderRectangle.Bottom + GlobalValues.GapBetweenContainer),
new Size(pageFooterRectangle.Location.X,pageFooterRectangle.Top));
} }
} }

5
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs

@ -97,7 +97,7 @@ namespace ICSharpCode.Reports.Core {
CreateGroupedChildren(childList,element); CreateGroupedChildren(childList,element);
compVal = groupValue; compVal = groupValue;
} }
ShowIndexList(IndexList); // ShowIndexList(IndexList);
} }
@ -135,11 +135,9 @@ namespace ICSharpCode.Reports.Core {
foreach (BaseComparer element in list) { foreach (BaseComparer element in list) {
string s = String.Format("{0} ",element.ObjectArray[0]); string s = String.Format("{0} ",element.ObjectArray[0]);
GroupComparer gc = element as GroupComparer; GroupComparer gc = element as GroupComparer;
if ( gc != null) { if ( gc != null) {
s = s + "GroupHeader"; s = s + "GroupHeader";
if (gc.IndexList != null) { if (gc.IndexList != null) {
s = s + String.Format(" <{0}> Childs",gc.IndexList.Count); s = s + String.Format(" <{0}> Childs",gc.IndexList.Count);
} }
System.Console.WriteLine(s); System.Console.WriteLine(s);
@ -150,6 +148,7 @@ namespace ICSharpCode.Reports.Core {
} }
} }
#endregion #endregion
public virtual void Reset() public virtual void Reset()

9
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs

@ -81,7 +81,7 @@ namespace ICSharpCode.Reports.Core.Exporter
PrintHelper.AdjustSectionLocation(section); PrintHelper.AdjustSectionLocation(section);
var convertedSection = new ExporterCollection(); var convertedSection = new ExporterCollection();
Offset = new Point(section.Location.X,section.SectionOffset); Offset = new Point(section.Location.X,section.SectionOffset);
Point startOffset = Offset; Point startOffset = Offset;
if (section.Items.Count > 0) { if (section.Items.Count > 0) {
section.Items.SortByLocation(); section.Items.SortByLocation();
@ -362,6 +362,13 @@ foreach (var element in section.Items)
#endregion #endregion
protected void DebugShowSections ()
{
Console.WriteLine("\treportheader {0}",SectionBounds.ReportHeaderRectangle);
Console.WriteLine("\tpageheader {0}",SectionBounds.PageHeaderRectangle);
Console.WriteLine("\tdetail {0}",SectionBounds.DetailArea);
}
#region Property's #region Property's
protected Point Offset {get;set;} protected Point Offset {get;set;}

27
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs

@ -30,7 +30,7 @@ namespace ICSharpCode.Reports.Core.Exporter
public event EventHandler<RowRenderEventArgs> RowRendering; public event EventHandler<RowRenderEventArgs> RowRendering;
public BaseConverter(IDataNavigator dataNavigator,ExporterPage singlePage) public BaseConverter(IReportModel reportModel,IDataNavigator dataNavigator,ExporterPage singlePage)
{ {
if (dataNavigator == null) { if (dataNavigator == null) {
throw new ArgumentNullException("dataNavigator"); throw new ArgumentNullException("dataNavigator");
@ -38,11 +38,10 @@ namespace ICSharpCode.Reports.Core.Exporter
if (singlePage == null) { if (singlePage == null) {
throw new ArgumentNullException("singlePage"); throw new ArgumentNullException("singlePage");
} }
this.ReportModel = reportModel;
this.SinglePage = singlePage; this.SinglePage = singlePage;
this.DataNavigator = dataNavigator; this.DataNavigator = dataNavigator;
SectionBounds = this.SinglePage.SectionBounds;
this.Layouter = (ILayouter)ServiceContainer.GetService(typeof(ILayouter)); this.Layouter = (ILayouter)ServiceContainer.GetService(typeof(ILayouter));
this.Evaluator = EvaluationHelper.CreateEvaluator(this.SinglePage,this.DataNavigator); this.Evaluator = EvaluationHelper.CreateEvaluator(this.SinglePage,this.DataNavigator);
} }
@ -53,8 +52,7 @@ namespace ICSharpCode.Reports.Core.Exporter
protected void BuildNewPage(ExporterCollection myList,BaseSection section) protected void BuildNewPage(ExporterCollection myList,BaseSection section)
{ {
FirePageFull(myList); FirePageFull(myList);
section.SectionOffset = SinglePage.SectionBounds.PageHeaderRectangle.Location.Y; section.SectionOffset = SinglePage.SectionBounds.PageHeaderRectangle.Location.Y;
// Console.WriteLine("BuildNewPage with {0} - {1}",SinglePage.SectionBounds.PageHeaderRectangle.Location,section.SectionOffset);
myList.Clear(); myList.Clear();
} }
@ -90,7 +88,6 @@ namespace ICSharpCode.Reports.Core.Exporter
protected void FireGroupFooterRendering (GroupFooter groupFooter) protected void FireGroupFooterRendering (GroupFooter groupFooter)
{ {
// Console.WriteLine("\tFireGroupFooterRendering");
GroupFooterEventArgs gfea = new GroupFooterEventArgs(groupFooter); GroupFooterEventArgs gfea = new GroupFooterEventArgs(groupFooter);
EventHelper.Raise<GroupFooterEventArgs>(GroupFooterRendering,this,gfea); EventHelper.Raise<GroupFooterEventArgs>(GroupFooterRendering,this,gfea);
} }
@ -124,6 +121,12 @@ namespace ICSharpCode.Reports.Core.Exporter
return null; return null;
} }
protected void DebugShowSections ()
{
Console.WriteLine("\treportheader {0}",SectionBounds.ReportHeaderRectangle);
Console.WriteLine("\tpageheader {0}",SectionBounds.PageHeaderRectangle);
Console.WriteLine("\tdetail {0}",SectionBounds.DetailArea);
}
#region Grouping #region Grouping
@ -188,8 +191,14 @@ namespace ICSharpCode.Reports.Core.Exporter
public ISinglePage SinglePage {get;private set;} public ISinglePage SinglePage {get;private set;}
public SectionBounds SectionBounds {get; private set;} public SectionBounds SectionBounds
{
get
{
return SinglePage.SectionBounds;
}
}
public IDataNavigator DataNavigator {get;private set;} public IDataNavigator DataNavigator {get;private set;}
public ILayouter Layouter {get; private set;} public ILayouter Layouter {get; private set;}
@ -198,6 +207,8 @@ namespace ICSharpCode.Reports.Core.Exporter
protected IExpressionEvaluatorFacade Evaluator{get;private set;} protected IExpressionEvaluatorFacade Evaluator{get;private set;}
protected IReportModel ReportModel {get; private set;}
protected int DefaultLeftPosition {get;set;} protected int DefaultLeftPosition {get;set;}
protected void SaveSectionSize(Size size) protected void SaveSectionSize(Size size)

9
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/ConverterFactory.cs

@ -14,16 +14,17 @@ namespace ICSharpCode.Reports.Core.Exporter
public static class ConverterFactory public static class ConverterFactory
{ {
public static IBaseConverter CreateConverter (BaseReportItem itemToConvert,IDataNavigator dataNavigator, public static IBaseConverter CreateConverter (BaseReportItem itemToConvert,IReportModel reportModel,
ExporterPage singlePage) IDataNavigator dataNavigator,ExporterPage singlePage)
{ {
Type t = itemToConvert.GetType(); Type t = itemToConvert.GetType();
if (t.Equals(typeof(BaseTableItem))) { if (t.Equals(typeof(BaseTableItem))) {
return new GroupedTableConverter(dataNavigator,singlePage); return new GroupedTableConverter(reportModel,dataNavigator,singlePage);
} }
if (t.Equals(typeof(BaseRowItem))) { if (t.Equals(typeof(BaseRowItem))) {
return new GroupedRowConverter (dataNavigator,singlePage); return new GroupedRowConverter (reportModel,dataNavigator,singlePage);
} }
return null; return null;

32
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs

@ -20,8 +20,8 @@ namespace ICSharpCode.Reports.Core.Exporter
private BaseReportItem parent; private BaseReportItem parent;
public GroupedRowConverter(IDataNavigator dataNavigator, public GroupedRowConverter(IReportModel reportModel,IDataNavigator dataNavigator,
ExporterPage singlePage):base(dataNavigator,singlePage) ExporterPage singlePage):base(reportModel,dataNavigator,singlePage)
{ {
} }
@ -71,8 +71,7 @@ namespace ICSharpCode.Reports.Core.Exporter
groupSize = section.Items[0].Size; groupSize = section.Items[0].Size;
childSize = section.Items[1].Size; childSize = section.Items[1].Size;
} }
// Console.WriteLine("start with section at {0}",section.SectionOffset);
// Console.WriteLine();
do { do {
base.SaveSectionSize(section.Size); base.SaveSectionSize(section.Size);
PrintHelper.AdjustSectionLocation (section); PrintHelper.AdjustSectionLocation (section);
@ -164,23 +163,16 @@ namespace ICSharpCode.Reports.Core.Exporter
private Point CalculateStartPosition(BaseSection section) private Point CalculateStartPosition(BaseSection section)
{ {
/*
Console.WriteLine();
Console.WriteLine(" CalculateStartPosition");
Console.WriteLine("{0}",base.SectionBounds.DetailStart);
Console.WriteLine("{0} ",SectionBounds.DetailArea);
Console.WriteLine("{0} ",base.SectionBounds.ReportHeaderRectangle);
Console.WriteLine("{0} ",base.SectionBounds.PageHeaderRectangle);
// return new Point (base.SectionBounds.PageHeaderRectangle.X,SectionBounds.DetailStart.Y);
// return new Point (base.SectionBounds.PageHeaderRectangle.X,SectionBounds.DetailStart.Y);
// return new Point (base.SectionBounds.PageHeaderRectangle.X,SectionBounds.DetailArea.Top);
// return new Point (base.SectionBounds.PageHeaderRectangle.X,base.SectionBounds.PageHeaderRectangle.Bottom); Console.WriteLine ("CalculateStartPosition {0}", base.SectionBounds.DetailStart);
var pp = new Point (base.SectionBounds.PageHeaderRectangle.X,base.SectionBounds.PageHeaderRectangle.Bottom); var r = base.ReportModel;
Console.WriteLine ("Bottom {0}",pp); base.SectionBounds.MeasureReportHeader(r.ReportHeader);
Console.WriteLine("secoffset {0}",section.SectionOffset); base.SectionBounds.MeasurePageHeader(r.PageHeader);
*/ // Console.WriteLine("\treportheader {0}",base.SectionBounds.ReportHeaderRectangle);
return new Point (base.SectionBounds.PageHeaderRectangle.X,section.SectionOffset); // Console.WriteLine("\tpageheader {0}",base.SectionBounds.PageHeaderRectangle);
// Console.WriteLine("\tdetail {0}",base.SectionBounds.DetailArea);
// Console.WriteLine("\tret value {0}",base.SectionBounds.PageHeaderRectangle.Bottom );
return new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.PageHeaderRectangle.Bottom + 1);
} }

8
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs

@ -21,8 +21,8 @@ namespace ICSharpCode.Reports.Core.Exporter
private ITableContainer table; private ITableContainer table;
public GroupedTableConverter(IDataNavigator dataNavigator, public GroupedTableConverter(IReportModel reportModel,IDataNavigator dataNavigator,
ExporterPage singlePage):base(dataNavigator,singlePage) ExporterPage singlePage):base(reportModel,dataNavigator,singlePage)
{ {
} }
@ -102,12 +102,10 @@ namespace ICSharpCode.Reports.Core.Exporter
do do
{ {
StandardPrinter.AdjustBackColor(simpleContainer); StandardPrinter.AdjustBackColor(simpleContainer);
// StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor);
simpleContainer = table.Items[2] as ISimpleContainer; simpleContainer = table.Items[2] as ISimpleContainer;
containerSize = simpleContainer.Size; containerSize = simpleContainer.Size;
FillRow(simpleContainer,childNavigator); FillRow(simpleContainer,childNavigator);
// PrepareContainerForConverting(section,simpleContainer);
FireRowRendering(simpleContainer,childNavigator); FireRowRendering(simpleContainer,childNavigator);
PrepareContainerForConverting(section,simpleContainer); PrepareContainerForConverting(section,simpleContainer);
base.CurrentPosition = ConvertStandardRow(exporterCollection,simpleContainer); base.CurrentPosition = ConvertStandardRow(exporterCollection,simpleContainer);

16
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs

@ -68,18 +68,24 @@ namespace ICSharpCode.Reports.Core.Exporter
{ {
base.ReportModel.ReportHeader.SectionOffset = base.SinglePage.SectionBounds.ReportHeaderRectangle.Top; base.ReportModel.ReportHeader.SectionOffset = base.SinglePage.SectionBounds.ReportHeaderRectangle.Top;
ConvertSectionInternal (base.ReportModel.ReportHeader); ConvertSectionInternal (base.ReportModel.ReportHeader);
base.SectionBounds.MeasurePageHeader(base.ReportModel.ReportHeader); } else
{
base.ReportModel.ReportHeader.Size = Size.Empty;
} }
base.SectionBounds.MeasurePageHeader(base.ReportModel.ReportHeader);
} }
protected override void BuildPageHeader () protected override void BuildPageHeader ()
{ {
// base.DebugShowSections();
base.SectionBounds.MeasurePageHeader(base.ReportModel.ReportHeader);
base.SectionBounds.MeasurePageHeader(base.ReportModel.PageHeader); base.SectionBounds.MeasurePageHeader(base.ReportModel.PageHeader);
// Console.WriteLine("----------------");
ConvertSectionInternal (base.ReportModel.PageHeader); ConvertSectionInternal (base.ReportModel.PageHeader);
base.ReportModel.PageHeader.Size = new Size(base.ReportModel.PageHeader.Size.Width,base.Offset.Y - base.ReportModel.PageHeader.SectionOffset);
base.SectionBounds.MeasurePageHeader(base.ReportModel.PageHeader); base.SectionBounds.MeasurePageHeader(base.ReportModel.PageHeader);
// base.DebugShowSections();
} }
@ -129,10 +135,12 @@ namespace ICSharpCode.Reports.Core.Exporter
protected Point BuildDetail (BaseSection section,IDataNavigator dataNavigator) protected Point BuildDetail (BaseSection section,IDataNavigator dataNavigator)
{ {
// Console.WriteLine ("detail at {0}",SectionBounds.DetailArea);
// Console.WriteLine ("detail start at {0}",SectionBounds.DetailStart);
ExporterCollection convertedList = new ExporterCollection(); ExporterCollection convertedList = new ExporterCollection();
foreach (BaseReportItem item in section.Items) foreach (BaseReportItem item in section.Items)
{ {
IBaseConverter baseConverter = ConverterFactory.CreateConverter(item,dataNavigator, IBaseConverter baseConverter = ConverterFactory.CreateConverter(item,base.ReportModel,dataNavigator,
this.SinglePage); this.SinglePage);
if (baseConverter != null) { if (baseConverter != null) {

10
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/Printing/SectionBoundFixture.cs

@ -204,17 +204,7 @@ namespace ICSharpCode.Reports.Core.Test.Printing
Assert.That(sectionBounds.DetailStart,Is.EqualTo(p)); Assert.That(sectionBounds.DetailStart,Is.EqualTo(p));
} }
[Test]
public void DetailEnds_One_Above_PageFootter ()
{
SectionBounds sectionBounds = new SectionBounds(new ReportSettings(),true);
BaseSection pageFootter = CreateSection();
sectionBounds.MeasurePageFooter(pageFootter);
Point p = new Point(sectionBounds.PageFooterRectangle.Left,sectionBounds.PageFooterRectangle.Top -1);
Assert.That(sectionBounds.DetailEnds,Is.EqualTo(p));
}
public override void Setup() public override void Setup()
{ {

Loading…
Cancel
Save