Browse Source

DataPageBuilder.cs

reports
Peter Forstmeier 12 years ago
parent
commit
6a08d8f096
  1. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj
  2. 63
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs
  3. 56
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs
  4. 57
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs
  5. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs
  6. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/ICSharpCode.Reporting.Test.csproj
  7. 61
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/DataPageBuilderFixture.cs
  8. 17
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs

1
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj

@ -124,6 +124,7 @@ @@ -124,6 +124,7 @@
<Compile Include="Src\Items\ReportSettings.cs" />
<Compile Include="Src\PageBuilder\BasePageBuilder.cs" />
<Compile Include="Src\PageBuilder\Converter\ContainerConverter.cs" />
<Compile Include="Src\PageBuilder\DataPageBuilder.cs" />
<Compile Include="Src\PageBuilder\ExportColumns\ExportColumn.cs" />
<Compile Include="Src\PageBuilder\ExportColumns\ExportContainer.cs" />
<Compile Include="Src\PageBuilder\ExportColumns\ExportText.cs" />

63
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs

@ -10,6 +10,7 @@ using System; @@ -10,6 +10,7 @@ using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Drawing;
using System.Linq;
using ICSharpCode.Reporting.BaseClasses;
using ICSharpCode.Reporting.Globals;
@ -42,6 +43,66 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -42,6 +43,66 @@ namespace ICSharpCode.Reporting.PageBuilder
return new Page(pi,ReportModel.ReportSettings.PageSize);
}
#region create Sections
protected void BuildReportHeader()
{
if (Pages.Count == 0) {
var header = CreateSection(ReportModel.ReportHeader,CurrentLocation);
var r = new Rectangle(header.Location.X,header.Location.Y,header.Size.Width,header.Size.Height);
CurrentLocation = new Point (ReportModel.ReportSettings.LeftMargin,r.Bottom + 1);
AddSectionToPage(header);
}
}
protected void BuildPageHeader()
{
var pageHeader = CreateSection(ReportModel.PageHeader,CurrentLocation);
DetailStart = new Point(ReportModel.ReportSettings.LeftMargin,pageHeader.Location.Y + pageHeader.Size.Height +1);
AddSectionToPage(pageHeader);
}
protected void BuildPageFooter()
{
Console.WriteLine("FormPageBuilder - Build PageFooter {0} - {1}",ReportModel.ReportSettings.PageSize.Height,ReportModel.ReportSettings.BottomMargin);
CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,
ReportModel.ReportSettings.PageSize.Height - ReportModel.ReportSettings.BottomMargin - ReportModel.PageFooter.Size.Height);
var pageFooter = CreateSection(ReportModel.PageFooter,CurrentLocation);
AddSectionToPage(pageFooter);
}
protected void BuildReportFooter()
{
Console.WriteLine("FormPageBuilder - Build ReportFooter {0} - {1}",ReportModel.ReportSettings.PageSize.Height,ReportModel.ReportSettings.BottomMargin);
var lastSection = CurrentPage.ExportedItems.Last();
CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,
lastSection.Location.Y - lastSection.Size.Height - 1);
var reportFooter = CreateSection(ReportModel.ReportFooter,CurrentLocation);
AddSectionToPage(reportFooter);
}
#endregion
protected virtual void WritePages()
{
CurrentPage = InitNewPage();
CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.TopMargin);
this.BuildReportHeader();
BuildPageHeader();
BuildPageFooter();
// BuilDetail();
BuildReportFooter();
// base.AddPage(CurrentPage);
// Console.WriteLine("------{0}---------",ReportModel.ReportSettings.PageSize);
}
protected IExportContainer CreateSection(IReportContainer section,Point location)
{
var containerConverter = new ContainerConverter(graphics, section, location);
@ -86,6 +147,8 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -86,6 +147,8 @@ namespace ICSharpCode.Reporting.PageBuilder
protected IPage CurrentPage {get; set;}
protected Point DetailStart {get;private set;}
public Collection<IPage> Pages {get; private set;}
}

56
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs

@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 06.06.2013
* Time: 20:27
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using ICSharpCode.Reporting.Items;
namespace ICSharpCode.Reporting.PageBuilder
{
/// <summary>
/// Description of DataPageBuilder.
/// </summary>
public class DataPageBuilder:BasePageBuilder
{
public DataPageBuilder(ReportModel reportModel, IEnumerable<object> list):base(reportModel)
{
List = list;
}
public override void BuildExportList()
{
base.BuildExportList();
WritePages ();
}
void BuilDetail()
{
Console.WriteLine("FormPageBuilder - Build DetailSection {0} - {1} - {2}",ReportModel.ReportSettings.PageSize.Width,ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.RightMargin);
CurrentLocation = DetailStart;
var detail = CreateSection(ReportModel.DetailSection,CurrentLocation);
detail.Parent = CurrentPage;
CurrentPage.ExportedItems.Insert(2,detail);
}
protected override void WritePages()
{
base.WritePages();
BuilDetail();
base.AddPage(CurrentPage);
Console.WriteLine("------{0}---------",ReportModel.ReportSettings.PageSize);
}
public IEnumerable<object> List {get; private set;}
}
}

57
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs

@ -22,8 +22,6 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -22,8 +22,6 @@ namespace ICSharpCode.Reporting.PageBuilder
public class FormPageBuilder:BasePageBuilder
{
Point detailStart;
public FormPageBuilder(IReportModel reportModel):base(reportModel)
{
@ -37,65 +35,22 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -37,65 +35,22 @@ namespace ICSharpCode.Reporting.PageBuilder
}
void BuildReportHeader()
{
if (Pages.Count == 0) {
IExportContainer header = CreateSection(ReportModel.ReportHeader,CurrentLocation);
var r = new Rectangle(header.Location.X,header.Location.Y,header.Size.Width,header.Size.Height);
CurrentLocation = new Point (ReportModel.ReportSettings.LeftMargin,r.Bottom + 1);
AddSectionToPage(header);
}
}
void BuildPageHeader()
{
IExportContainer header = CreateSection(ReportModel.PageHeader,CurrentLocation);
detailStart = new Point(ReportModel.ReportSettings.LeftMargin,header.Location.Y + header.Size.Height +1);
AddSectionToPage(header);
}
void BuilDetail()
{
Console.WriteLine("FormPageBuilder - Build DetailSection {0} - {1} - {2}",ReportModel.ReportSettings.PageSize.Width,ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.RightMargin);
CurrentLocation = detailStart;
IExportContainer header = CreateSection(ReportModel.DetailSection,CurrentLocation);
header.Parent = CurrentPage;
CurrentPage.ExportedItems.Insert(2,header);
}
void BuildPageFooter()
{
Console.WriteLine("FormPageBuilder - Build PageFooter {0} - {1}",ReportModel.ReportSettings.PageSize.Height,ReportModel.ReportSettings.BottomMargin);
CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,
ReportModel.ReportSettings.PageSize.Height - ReportModel.ReportSettings.BottomMargin - ReportModel.PageFooter.Size.Height);
IExportContainer header = CreateSection(ReportModel.PageFooter,CurrentLocation);
AddSectionToPage(header);
}
void BuildReportFooter()
{
Console.WriteLine("FormPageBuilder - Build ReportFooter {0} - {1}",ReportModel.ReportSettings.PageSize.Height,ReportModel.ReportSettings.BottomMargin);
var lastSection = CurrentPage.ExportedItems.Last();
CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,
lastSection.Location.Y - lastSection.Size.Height - 1);
CurrentLocation = DetailStart;
IExportContainer header = CreateSection(ReportModel.ReportFooter,CurrentLocation);
AddSectionToPage(header);
var detail = CreateSection(ReportModel.DetailSection,CurrentLocation);
detail.Parent = CurrentPage;
CurrentPage.ExportedItems.Insert(2,detail);
}
void WritePages()
protected override void WritePages()
{
CurrentPage = base.InitNewPage();
CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.TopMargin);
this.BuildReportHeader();
BuildPageHeader();
BuildPageFooter();
base.WritePages();
BuilDetail();
BuildReportFooter();
base.AddPage(CurrentPage);
Console.WriteLine("------{0}---------",ReportModel.ReportSettings.PageSize);
}

3
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs

@ -40,6 +40,9 @@ namespace ICSharpCode.Reporting @@ -40,6 +40,9 @@ namespace ICSharpCode.Reporting
return builder;
}
internal IReportCreator ReportCreator (Stream stream)
{
IReportModel reportModel = LoadReportModel (stream);

1
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/ICSharpCode.Reporting.Test.csproj

@ -67,6 +67,7 @@ @@ -67,6 +67,7 @@
<Compile Include="src\PageBuilder\ContainerArrangeStrategyFixture.cs" />
<Compile Include="src\PageBuilder\BaseConvertFixture.cs" />
<Compile Include="src\PageBuilder\ContainerConverterFixture.cs" />
<Compile Include="src\PageBuilder\DataPageBuilderFixture.cs" />
<Compile Include="src\PageBuilder\PageBuilderFixture.cs" />
<Compile Include="src\PageBuilder\PageFixture.cs" />
<Compile Include="src\PageBuilder\PageLayoutFixture.cs" />

61
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/DataPageBuilderFixture.cs

@ -0,0 +1,61 @@ @@ -0,0 +1,61 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 06.06.2013
* Time: 20:29
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Linq;
using System.Reflection;
using ICSharpCode.Reporting.Exporter;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using NUnit.Framework;
namespace ICSharpCode.Reporting.Test.PageBuilder
{
[TestFixture]
public class DataPageBuilderFixture
{
private IReportCreator reportCreator;
[Test]
public void CanInitDataPageBuilder()
{
var dpb = new DataPageBuilder (new ReportModel(),new System.Collections.Generic.List<string>());
// dpb.DataSource(new ReportModel(),new System.Collections.Generic.List<string>());
Assert.That(dpb,Is.Not.Null);
}
[Test]
public void PageContainsFiveSections()
{
reportCreator.BuildExportList();
var x = reportCreator.Pages[0].ExportedItems;
var y = from s in x
where s.GetType() == typeof(ExportContainer)
select s;
Assert.That(y.ToList().Count,Is.EqualTo(5));
Console.WriteLine("-------ShowDebug---------");
var ex = new DebugExporter(reportCreator.Pages);
ex.Run();
}
[SetUp]
public void LoadFromStream()
{
System.Reflection.Assembly asm = Assembly.GetExecutingAssembly();
var stream = asm.GetManifestResourceStream(TestHelper.RepWithTwoItems);
var reportingFactory = new ReportingFactory();
// reportCreator = reportingFactory.ReportCreator(stream);
var model = reportingFactory.LoadReportModel (stream);
reportCreator = new DataPageBuilder(model,new System.Collections.Generic.List<string>());
}
}
}

17
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs

@ -25,7 +25,7 @@ namespace ICSharpCode.Reporting.Test.PageBuilder @@ -25,7 +25,7 @@ namespace ICSharpCode.Reporting.Test.PageBuilder
private IReportCreator reportCreator;
[Test]
public void PageContainsFourExportContainer()
public void PageContainsFiveSections()
{
reportCreator.BuildExportList();
var x = reportCreator.Pages[0].ExportedItems;
@ -38,18 +38,25 @@ namespace ICSharpCode.Reporting.Test.PageBuilder @@ -38,18 +38,25 @@ namespace ICSharpCode.Reporting.Test.PageBuilder
ex.Run();
}
[Test]
public void SectionsInPageDoNotOverlap()
{
Point p = Point.Empty;
Point referencePoint = Point.Empty;
var referenceRect = Rectangle.Empty;
reportCreator.BuildExportList();
foreach (var item in reportCreator.Pages[0].ExportedItems) {
var p2 = new Point(item.Location.X,item.Location.Y);
Console.WriteLine("{0} - {1} - {2}- {3}",p2,item.Size.Height,item.Name,item.DisplayRectangle);
Console.WriteLine("{0} - {1} - {2}- <{3}>",p2,item.Size.Height,item.Name,item.DisplayRectangle);
if (item.Name != "ReportFooter") {
Assert.That(p2.Y,Is.GreaterThan(p.Y),item.Name);
Assert.That(p2.Y,Is.GreaterThan(referencePoint.Y),item.Name);
var t = referenceRect.IntersectsWith(item.DisplayRectangle);
Assert.That(referenceRect.IntersectsWith(item.DisplayRectangle),Is.False);
}
p = new Point(item.Location.X,item.Location.Y + item.Size.Height);
referencePoint = new Point(item.Location.X,item.Location.Y + item.Size.Height);
referenceRect = item.DisplayRectangle;
}
}

Loading…
Cancel
Save