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

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

@ -85,18 +85,23 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -85,18 +85,23 @@ namespace ICSharpCode.Reports.Core.Exporter
protected override void BuildPageHeader ()
{
var s = base.ReportModel.PageHeader;
var i = base.Pages.Count;
Console.WriteLine("");
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);
base.ReportModel.PageHeader.SectionOffset = base.AdjustPageHeader();
Console.WriteLine("name <{0}> on PAGE {1}",s.Name,base.Pages.Count);
Console.WriteLine("section {0}",base.ReportModel.PageHeader.Size);
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);
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.MeasureDetailArea();
base.SectionBounds.MeasurePageHeader(base.ReportModel.PageHeader);
base.SinglePage.Items.AddRange(convertedList);
Console.WriteLine("aft-section size {0} sectionoffset {1} offset {2}",s.Size,s.SectionOffset,base.Offset);
Console.WriteLine();
}
@ -146,9 +151,9 @@ Console.WriteLine(""); @@ -146,9 +151,9 @@ Console.WriteLine("");
{
ExporterCollection convertedList = new ExporterCollection();
var s = section;
// Console.WriteLine("name <{0}>",s.Name);
// Console.WriteLine("start section size {0} sectionoffset {1} offset {2}",s.Size,s.SectionOffset,base.Offset);
// Console.WriteLine("----");
Console.WriteLine("name <{0}>",s.Name);
Console.WriteLine("start section size {0} sectionoffset {1} offset {2}",s.Size,s.SectionOffset,base.Offset);
Console.WriteLine("----");
foreach (BaseReportItem item in section.Items)
{
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 @@ @@ -4,6 +4,7 @@
using System;
using System.Drawing;
using ICSharpCode.Reports.Core.BaseClasses;
using ICSharpCode.Reports.Core.Globals;
using ICSharpCode.Reports.Core.Test.TestHelpers;
using NUnit.Framework;
@ -52,49 +53,32 @@ namespace ICSharpCode.Reports.Core.Test.Printing @@ -52,49 +53,32 @@ namespace ICSharpCode.Reports.Core.Test.Printing
public void MeasureReportHeaderForFirstPageWithEmptyItems()
{
SectionBounds sectionBounds = new SectionBounds(new ReportSettings(),true);
BaseSection baseSection = new BaseSection();
baseSection.Location = new Point (50,50);
baseSection.Size = new Size (727,60);
var baseSection = CreateSection();
sectionBounds.MeasureReportHeader(baseSection);
Assert.AreEqual(0,sectionBounds.ReportHeaderRectangle.Size.Height,
"ItemsCollection is empty, so Size.Height should be '0'");
Assert.AreEqual(sectionBounds.MarginBounds.Width,
sectionBounds.ReportHeaderRectangle.Width);
Size size = new Size(baseSection.Size.Width,0);
Assert.That(sectionBounds.ReportHeaderRectangle.Size,Is.EqualTo(size));
}
[Test]
public void MeasureReportHeaderForFirstPageWithItems()
public void ReportHeader_For_FirstPage_WithItems()
{
/*
SectionBounds sectionBounds = new SectionBounds(new ReportSettings(),true);
BaseSection reportHeader = CreateSection();
reportHeader.Items.Add(new BaseTextItem());
BaseSection baseSection = new BaseSection();
baseSection.Location = new Point (50,50);
baseSection.Size = new Size (727,60);
sectionBounds.MeasureReportHeader(reportHeader);
baseSection.Items.Add(new BaseTextItem());
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);
*/
Assert.That(sectionBounds.ReportHeaderRectangle.Size,Is.EqualTo(reportHeader.Size));
}
[Test]
public void MeasureReportHeaderForAnyPage ()
{
BaseSection bs = new BaseSection();
bs.Location = new Point (50,50);
bs.Size = new Size (727,60);
Sut.MeasureReportHeader(bs);
var baseSection = CreateSection();
Sut.MeasureReportHeader(baseSection);
Assert.AreEqual(0,Sut.ReportHeaderRectangle.Size.Height);
int a = Sut.MarginBounds.Width;
Assert.AreEqual(Sut.MarginBounds.Width,Sut.ReportHeaderRectangle.Width);
}
#endregion
@ -110,23 +94,29 @@ namespace ICSharpCode.Reports.Core.Test.Printing @@ -110,23 +94,29 @@ namespace ICSharpCode.Reports.Core.Test.Printing
[Test]
public void MeasurePageHeader()
public void PageHeader_No_Items()
{
/*
SectionBounds sectionBounds = new SectionBounds(new ReportSettings(),true);
BaseSection baseSection = new BaseSection();
baseSection.Location = new Point (50,50);
baseSection.Size = new Size (727,60);
sectionBounds.MeasurePageHeader(baseSection);
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);
*/
BaseSection baseSection = CreateSection();
Sut.MeasurePageHeader(baseSection);
Size size = new Size (baseSection.Size.Width,0);
Assert.That(Sut.PageHeaderRectangle.Size,Is.EqualTo(size));
}
[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
#region MeasurePageFooter
@ -148,6 +138,7 @@ namespace ICSharpCode.Reports.Core.Test.Printing @@ -148,6 +138,7 @@ namespace ICSharpCode.Reports.Core.Test.Printing
baseSection.Location = new Point (50,50);
baseSection.Size = new Size (727,60);
sectionBounds.MeasurePageFooter(baseSection);
//sectionBounds.MeasurePageFooter(Sut);
Assert.AreEqual(baseSection.Size.Height,
sectionBounds.PageFooterRectangle.Size.Height);
@ -234,5 +225,19 @@ namespace ICSharpCode.Reports.Core.Test.Printing @@ -234,5 +225,19 @@ namespace ICSharpCode.Reports.Core.Test.Printing
ReportSettings rs = new ReportSettings();
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