Browse Source

SectionBoundFixture.cs

pull/15/head^2
peterforstmeier 15 years ago
parent
commit
2d5c829e8f
  1. 72
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SectionBounds.cs
  2. 11
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs
  3. 27
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs
  4. 85
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/Printing/SectionBoundFixture.cs

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

@ -14,7 +14,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses
public interface ISectionBounds public interface ISectionBounds
{ {
Rectangle MarginBounds {get;} Rectangle MarginBounds {get;}
Rectangle ReportHeaderRectangle{get;} Rectangle ReportHeaderRectangle{get;}
Rectangle PageHeaderRectangle {get;} Rectangle PageHeaderRectangle {get;}
Rectangle PageFooterRectangle {get;} Rectangle PageFooterRectangle {get;}
Rectangle ReportFooterRectangle {get;set;} Rectangle ReportFooterRectangle {get;set;}
@ -43,7 +43,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses
#region Constructor #region Constructor
public SectionBounds (ReportSettings reportSettings,bool firstPage) public SectionBounds (ReportSettings reportSettings,bool firstPage)
{ {
@ -58,7 +58,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses
this.printableArea = new Rectangle(reportSettings.LeftMargin,reportSettings.TopMargin, this.printableArea = new Rectangle(reportSettings.LeftMargin,reportSettings.TopMargin,
reportSettings.PageSize.Width - reportSettings.RightMargin, reportSettings.PageSize.Width - reportSettings.RightMargin,
reportSettings.PageSize.Height - reportSettings.BottomMargin); reportSettings.PageSize.Height - reportSettings.BottomMargin);
this.marginBounds = new Rectangle(reportSettings.LeftMargin, this.marginBounds = new Rectangle(reportSettings.LeftMargin,
reportSettings.TopMargin, reportSettings.TopMargin,
reportSettings.PageSize.Width - reportSettings.LeftMargin - reportSettings.RightMargin, reportSettings.PageSize.Width - reportSettings.LeftMargin - reportSettings.RightMargin,
@ -77,39 +77,69 @@ namespace ICSharpCode.Reports.Core.BaseClasses
Size size = Size.Empty; Size size = Size.Empty;
section.SectionOffset = this.printableArea.Location.Y; section.SectionOffset = this.printableArea.Location.Y;
if (this.firstPage) { if (this.firstPage)
if (section.Items.Count > 0) { {
size = new Size(this.marginBounds.Width,section.Size.Height + 3 * GlobalValues.GapBetweenContainer); size = CalculateSize(section);
} else { }
size = new Size(this.marginBounds.Width,0); else
} {
} else {
size = new Size(this.marginBounds.Width,0); size = new Size(this.marginBounds.Width,0);
} }
this.reportHeaderRectangle = new Rectangle(this.printableArea.Location,size); this.reportHeaderRectangle = new Rectangle(this.printableArea.Location,size);
} }
Size CalculateSize(BaseSection section)
{
Size size = Size.Empty;
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);
} else {
size = new Size(this.marginBounds.Width, 0);
}
return size;
}
public void MeasurePageHeader (IReportItem section) public void MeasurePageHeader (BaseSection section)
{ {
if (section == null) { if (section == null) {
throw new ArgumentNullException("section"); throw new ArgumentNullException("section");
} }
section.SectionOffset = this.reportHeaderRectangle.Bottom + 3 * GlobalValues.GapBetweenContainer; // section.SectionOffset = this.reportHeaderRectangle.Bottom + 3 * GlobalValues.GapBetweenContainer;
section.SectionOffset = this.reportHeaderRectangle.Bottom + GlobalValues.GapBetweenContainer;
Size s = CalculateSize(section);
/*
this.pageHeaderRectangle = new Rectangle (this.reportHeaderRectangle.Left, this.pageHeaderRectangle = new Rectangle (this.reportHeaderRectangle.Left,
section.SectionOffset, section.SectionOffset,
this.marginBounds.Width, this.marginBounds.Width,
section.Size.Height + 3 * GlobalValues.GapBetweenContainer); section.Size.Height + 3 * GlobalValues.GapBetweenContainer);
*/
// this.pageHeaderRectangle = new Rectangle (this.reportHeaderRectangle.Left,
// section.SectionOffset,
// this.marginBounds.Width,
// section.Size.Height);
Console.WriteLine("\tMeasurePageHeader {0}",pageHeaderRectangle); this.pageHeaderRectangle = new Rectangle (this.reportHeaderRectangle.Left,
section.SectionOffset,
this.marginBounds.Width,
s.Height);
Console.WriteLine("\tDetailStart {0}",DetailStart);
Console.WriteLine("---------------");
Console.WriteLine("\tMeasureReprtHeader {0}",reportHeaderRectangle);
Console.WriteLine("\tMeasurePageHeader {0}",pageHeaderRectangle);
Console.WriteLine("\tDetailStart {0}",DetailStart);
Console.WriteLine("---------------");
} }
public void MeasurePageFooter (IReportItem section) public void MeasurePageFooter (IReportItem section)
{ {
if (section == null) { if (section == null) {
@ -148,7 +178,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses
this.pageHeaderRectangle.Width, this.pageHeaderRectangle.Width,
(this.pageFooterRectangle.Top -1) - (this.pageHeaderRectangle.Bottom + 1)); (this.pageFooterRectangle.Top -1) - (this.pageHeaderRectangle.Bottom + 1));
} }
*/ */
#endregion #endregion
@ -172,7 +202,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses
//Test //Test
public Rectangle PageHeaderRectangle public Rectangle PageHeaderRectangle
{ {
get { get {
return pageHeaderRectangle; return pageHeaderRectangle;
@ -181,7 +211,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses
//Test //Test
public Rectangle PageFooterRectangle public Rectangle PageFooterRectangle
{ {
get { get {
return pageFooterRectangle; return pageFooterRectangle;
@ -190,7 +220,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses
//Test //Test
public Rectangle ReportFooterRectangle public Rectangle ReportFooterRectangle
{ {
get { get {
return reportFooterRectangle; return reportFooterRectangle;
@ -206,7 +236,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses
get { get {
// return new Point(this.pageHeaderRectangle.Left, // return new Point(this.pageHeaderRectangle.Left,
// this.pageHeaderRectangle.Bottom + 3 * GlobalValues.GapBetweenContainer); // this.pageHeaderRectangle.Bottom + 3 * GlobalValues.GapBetweenContainer);
return new Point(this.pageHeaderRectangle.Left, return new Point(this.pageHeaderRectangle.Left,
this.pageHeaderRectangle.Bottom ); this.pageHeaderRectangle.Bottom );
} }
} }
@ -234,7 +264,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses
} }
} }
public Rectangle DetailSectionRectangle {get;set;} public Rectangle DetailSectionRectangle {get;set;}

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

@ -47,17 +47,6 @@ namespace ICSharpCode.Reports.Core.Exporter
#region Create and Init new page #region Create and Init new page
protected int AdjustPageHeader ()
{
int offset = 0;
if (this.SinglePage.Items.Count > 0) {
offset = this.SinglePage.SectionBounds.PageHeaderRectangle.Top;
} else {
offset = this.SinglePage.SectionBounds.ReportHeaderRectangle.Top;
}
return offset;
}
protected ExporterPage InitNewPage () protected ExporterPage InitNewPage ()
{ {

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

@ -85,18 +85,23 @@ namespace ICSharpCode.Reports.Core.Exporter
protected override void BuildPageHeader () protected override void BuildPageHeader ()
{ {
var s = base.ReportModel.PageHeader; var s = base.ReportModel.PageHeader;
var i = base.Pages.Count;
Console.WriteLine(""); Console.WriteLine("name <{0}> on PAGE {1}",s.Name,base.Pages.Count);
Console.WriteLine("name <{0}> on PAGE {1}",s.Name,i);
Console.WriteLine("start section size {0} sectionoffset {1} offset {2}",s.Size,s.SectionOffset,base.Offset); Console.WriteLine("section {0}",base.ReportModel.PageHeader.Size);
base.ReportModel.PageHeader.SectionOffset = base.AdjustPageHeader();
base.SectionBounds.MeasurePageHeader(base.ReportModel.PageHeader);
// Console.WriteLine("section after adjustparent {0} new size {1}",base.ReportModel.PageHeader.SectionOffset,ss);
ExporterCollection convertedList = base.ConvertSection (base.ReportModel.PageHeader,this.dataNavigator.CurrentRow); ExporterCollection convertedList = base.ConvertSection (base.ReportModel.PageHeader,this.dataNavigator.CurrentRow);
Console.WriteLine("end section size {0} sectionoffset {1} offset {2}",s.Size,s.SectionOffset,base.Offset); Console.WriteLine("end section size {0} sectionoffset {1} offset {2}",s.Size,s.SectionOffset,base.Offset);
base.SectionBounds.MeasurePageHeader(base.ReportModel.ReportHeader); base.SectionBounds.MeasurePageHeader(base.ReportModel.PageHeader);
// base.SectionBounds.MeasurePageHeader(base.ReportModel.PageHeader);
// base.SectionBounds.MeasureDetailArea();
base.SinglePage.Items.AddRange(convertedList); base.SinglePage.Items.AddRange(convertedList);
Console.WriteLine("aft-section size {0} sectionoffset {1} offset {2}",s.Size,s.SectionOffset,base.Offset); Console.WriteLine("aft-section size {0} sectionoffset {1} offset {2}",s.Size,s.SectionOffset,base.Offset);
Console.WriteLine(); Console.WriteLine();
} }
@ -146,9 +151,9 @@ Console.WriteLine("");
{ {
ExporterCollection convertedList = new ExporterCollection(); ExporterCollection convertedList = new ExporterCollection();
var s = section; var s = section;
// Console.WriteLine("name <{0}>",s.Name); Console.WriteLine("name <{0}>",s.Name);
// Console.WriteLine("start section size {0} sectionoffset {1} offset {2}",s.Size,s.SectionOffset,base.Offset); Console.WriteLine("start section size {0} sectionoffset {1} offset {2}",s.Size,s.SectionOffset,base.Offset);
// Console.WriteLine("----"); Console.WriteLine("----");
foreach (BaseReportItem item in section.Items) foreach (BaseReportItem item in section.Items)
{ {
IBaseConverter baseConverter = ConverterFactory.CreateConverter(item,dataNavigator, IBaseConverter baseConverter = ConverterFactory.CreateConverter(item,dataNavigator,

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

@ -4,6 +4,7 @@
using System; using System;
using System.Drawing; using System.Drawing;
using ICSharpCode.Reports.Core.BaseClasses; using ICSharpCode.Reports.Core.BaseClasses;
using ICSharpCode.Reports.Core.Globals;
using ICSharpCode.Reports.Core.Test.TestHelpers; using ICSharpCode.Reports.Core.Test.TestHelpers;
using NUnit.Framework; using NUnit.Framework;
@ -52,49 +53,32 @@ namespace ICSharpCode.Reports.Core.Test.Printing
public void MeasureReportHeaderForFirstPageWithEmptyItems() public void MeasureReportHeaderForFirstPageWithEmptyItems()
{ {
SectionBounds sectionBounds = new SectionBounds(new ReportSettings(),true); SectionBounds sectionBounds = new SectionBounds(new ReportSettings(),true);
BaseSection baseSection = new BaseSection(); var baseSection = CreateSection();
baseSection.Location = new Point (50,50);
baseSection.Size = new Size (727,60);
sectionBounds.MeasureReportHeader(baseSection); sectionBounds.MeasureReportHeader(baseSection);
Assert.AreEqual(0,sectionBounds.ReportHeaderRectangle.Size.Height, Size size = new Size(baseSection.Size.Width,0);
"ItemsCollection is empty, so Size.Height should be '0'"); Assert.That(sectionBounds.ReportHeaderRectangle.Size,Is.EqualTo(size));
Assert.AreEqual(sectionBounds.MarginBounds.Width,
sectionBounds.ReportHeaderRectangle.Width);
} }
[Test] [Test]
public void MeasureReportHeaderForFirstPageWithItems() public void ReportHeader_For_FirstPage_WithItems()
{ {
/*
SectionBounds sectionBounds = new SectionBounds(new ReportSettings(),true); SectionBounds sectionBounds = new SectionBounds(new ReportSettings(),true);
BaseSection reportHeader = CreateSection();
reportHeader.Items.Add(new BaseTextItem());
BaseSection baseSection = new BaseSection(); sectionBounds.MeasureReportHeader(reportHeader);
baseSection.Location = new Point (50,50);
baseSection.Size = new Size (727,60);
baseSection.Items.Add(new BaseTextItem()); Assert.That(sectionBounds.ReportHeaderRectangle.Size,Is.EqualTo(reportHeader.Size));
sectionBounds.MeasureReportHeader(baseSection);
Assert.AreEqual(baseSection.Size.Height + sectionBounds.Gap,
sectionBounds.ReportHeaderRectangle.Size.Height,
"ItemsCollection is not empty, so Size.Height should NOT be '0'");
Assert.AreEqual(sectionBounds.MarginBounds.Width,
sectionBounds.ReportHeaderRectangle.Width);
*/
} }
[Test] [Test]
public void MeasureReportHeaderForAnyPage () public void MeasureReportHeaderForAnyPage ()
{ {
BaseSection bs = new BaseSection(); var baseSection = CreateSection();
bs.Location = new Point (50,50); Sut.MeasureReportHeader(baseSection);
bs.Size = new Size (727,60);
Sut.MeasureReportHeader(bs);
Assert.AreEqual(0,Sut.ReportHeaderRectangle.Size.Height); Assert.AreEqual(0,Sut.ReportHeaderRectangle.Size.Height);
int a = Sut.MarginBounds.Width;
Assert.AreEqual(Sut.MarginBounds.Width,Sut.ReportHeaderRectangle.Width);
} }
#endregion #endregion
@ -110,23 +94,29 @@ namespace ICSharpCode.Reports.Core.Test.Printing
[Test] [Test]
public void MeasurePageHeader() public void PageHeader_No_Items()
{ {
/* BaseSection baseSection = CreateSection();
SectionBounds sectionBounds = new SectionBounds(new ReportSettings(),true);
BaseSection baseSection = new BaseSection(); Sut.MeasurePageHeader(baseSection);
baseSection.Location = new Point (50,50); Size size = new Size (baseSection.Size.Width,0);
baseSection.Size = new Size (727,60);
sectionBounds.MeasurePageHeader(baseSection); Assert.That(Sut.PageHeaderRectangle.Size,Is.EqualTo(size));
Assert.AreEqual(baseSection.Size.Height + sectionBounds.Gap, sectionBounds.PageHeaderRectangle.Size.Height,
"ItemsCollection is empty, so Size.Height should be '0'");
Assert.AreEqual(sectionBounds.MarginBounds.Width,
sectionBounds.PageHeaderRectangle.Width);
*/
} }
[Test]
public void PageHeader_Location_One_Point_Under_ReportHeader()
{
BaseSection reportHeader = CreateSection();
BaseSection pageHeader = CreateSection();
Sut.MeasureReportHeader(reportHeader);
Sut.MeasurePageHeader(pageHeader);
Assert.That (pageHeader.SectionOffset,Is.GreaterThan(Sut.ReportHeaderRectangle.Bottom));
Assert.That (pageHeader.SectionOffset,Is.EqualTo(Sut.ReportHeaderRectangle.Bottom + 1));
}
#endregion #endregion
#region MeasurePageFooter #region MeasurePageFooter
@ -148,6 +138,7 @@ namespace ICSharpCode.Reports.Core.Test.Printing
baseSection.Location = new Point (50,50); baseSection.Location = new Point (50,50);
baseSection.Size = new Size (727,60); baseSection.Size = new Size (727,60);
sectionBounds.MeasurePageFooter(baseSection); sectionBounds.MeasurePageFooter(baseSection);
//sectionBounds.MeasurePageFooter(Sut);
Assert.AreEqual(baseSection.Size.Height, Assert.AreEqual(baseSection.Size.Height,
sectionBounds.PageFooterRectangle.Size.Height); sectionBounds.PageFooterRectangle.Size.Height);
@ -234,5 +225,19 @@ namespace ICSharpCode.Reports.Core.Test.Printing
ReportSettings rs = new ReportSettings(); ReportSettings rs = new ReportSettings();
Sut = new SectionBounds(rs,false); Sut = new SectionBounds(rs,false);
} }
BaseSection CreateSection()
{
var sec = new BaseSection();
sec.Location = new Point (50,50);
sec.Size = new Size (727,60);
/*
sec.Items.Add (new BaseTextItem()
{
Text = "mytext";
}
*/
return sec;
}
} }
} }

Loading…
Cancel
Save