Browse Source

ContainerConverter

reports
Peter Forstmeier 13 years ago
parent
commit
bf916321c9
  1. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj
  2. 8
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs
  3. 52
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs
  4. 51
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/DataContainerConverter.cs
  5. 8
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/IContainerConverter.cs
  6. 34
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs
  7. 29
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/ContainerConverterFixture.cs

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

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

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

@ -101,8 +101,12 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -101,8 +101,12 @@ namespace ICSharpCode.Reporting.PageBuilder
protected IExportContainer CreateSection(IReportContainer container,Point location)
{
var containerConverter = new ContainerConverter(Graphics, container, location);
var convertedContainer = containerConverter.Convert();
var containerConverter = new ContainerConverter(Graphics, location);
var convertedContainer = containerConverter.Convert(container);
var list = containerConverter.CreateConvertedList(container,convertedContainer);
convertedContainer.ExportedItems.AddRange(list);
containerConverter.Measure(convertedContainer);
containerConverter.ArrangeContainer(convertedContainer);
return convertedContainer;
}

52
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs

@ -22,63 +22,65 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter @@ -22,63 +22,65 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter
/// </summary>
internal class ContainerConverter : IContainerConverter
{
public ContainerConverter(Graphics graphics, IReportContainer reportContainer, Point currentLocation)
public ContainerConverter(Graphics graphics, Point currentLocation)
{
if (graphics == null) {
throw new ArgumentNullException("graphics");
}
if (reportContainer == null) {
throw new ArgumentNullException("reportContainer");
}
Graphics = graphics;
Container = reportContainer;
CurrentLocation = currentLocation;
}
public virtual IExportContainer Convert()
public virtual IExportContainer Convert(IReportContainer reportContainer)
{
var exportContainer = CreateExportContainer();
var itemsList = CreateConvertedList(exportContainer,Point.Empty);
exportContainer.ExportedItems.AddRange(itemsList);
ArrangeContainer(exportContainer);
return exportContainer;
}
protected ExportContainer CreateExportContainer()
{
var exportContainer = (ExportContainer)Container.CreateExportColumn();
Console.WriteLine();
Console.WriteLine("Convert {0}",reportContainer.Name);
var exportContainer = (ExportContainer)reportContainer.CreateExportColumn();
exportContainer.Location = CurrentLocation;
exportContainer.DesiredSize = Measure(exportContainer);
return exportContainer;
}
protected List<IExportColumn> CreateConvertedList(IExportContainer exportContainer,Point position)
public List<IExportColumn> CreateConvertedList(IReportContainer reportContainer,IExportContainer exportContainer,Point position)
{
Console.WriteLine("CreateConvertedList {0}",reportContainer.Name);
var itemsList = new List<IExportColumn>();
foreach (var element in Container.Items) {
foreach (var element in reportContainer.Items) {
var exportColumn = ExportColumnFactory.CreateItem(element);
exportColumn.Parent = exportContainer;
exportColumn.Location = new Point(element.Location.X,element.Location.Y + position.Y);
exportColumn.DesiredSize = Measure(exportColumn);
itemsList.Add(exportColumn);
}
return itemsList;
}
Size Measure(IExportColumn element)
public List<IExportColumn> CreateConvertedList(IReportContainer reportContainer,IExportContainer exportContainer)
{
Console.WriteLine("CreateConvertedList {0}",reportContainer.Name);
var itemsList = new List<IExportColumn>();
foreach (var element in reportContainer.Items) {
var exportColumn = ExportColumnFactory.CreateItem(element);
exportColumn.Parent = exportContainer;
// exportColumn.Location = new Point(element.Location.X,element.Location.Y + exportContainer.Location.Y);
// exportColumn.Location = new Point(element.Location.X,element.Location.Y + position.Y);
// exportColumn.DesiredSize = Measure(exportColumn);
itemsList.Add(exportColumn);
}
return itemsList;
}
public Size Measure(IExportColumn element)
{
Console.WriteLine("Measure {0}",element.Name);
var measureStrategy = element.MeasurementStrategy();
return measureStrategy.Measure(element, Graphics);
}
protected void ArrangeContainer(IExportContainer exportContainer)
public void ArrangeContainer(IExportContainer exportContainer)
{
Console.WriteLine("ArrangeContainer {0}",exportContainer.Name);
var exportArrange = exportContainer.GetArrangeStrategy();
exportArrange.Arrange(exportContainer);
}

51
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/DataContainerConverter.cs

@ -1,51 +0,0 @@ @@ -1,51 +0,0 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 13.06.2013
* Time: 11:55
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using ICSharpCode.Reporting.DataManager.Listhandling;
using ICSharpCode.Reporting.Factories;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
namespace ICSharpCode.Reporting.PageBuilder.Converter
{
/// <summary>
/// Description of DataContainerConverter.
/// </summary>
internal class DataContainerConverter:ContainerConverter
{
CollectionSource collectionSource;
public DataContainerConverter(Graphics graphics, IReportContainer reportContainer,
Point currentLocation,CollectionSource collectionSource):base(graphics,reportContainer,currentLocation)
{
if (graphics == null) {
throw new ArgumentNullException("graphics");
}
if (reportContainer == null) {
throw new ArgumentNullException("reportContainer");
}
this.collectionSource = collectionSource;
}
public List<IExportColumn> Convert(IExportContainer container,Point position){
var itemsList = CreateConvertedList(container,position);
ArrangeContainer(container);
return itemsList;
}
}
}

8
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/IContainerConverter.cs

@ -10,15 +10,17 @@ using System; @@ -10,15 +10,17 @@ using System;
using System.Collections.Generic;
using System.Drawing;
using ICSharpCode.Reporting.Factories;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
namespace ICSharpCode.Reporting.PageBuilder.Converter
{
internal interface IContainerConverter
{
IExportContainer Convert();
IExportContainer Convert(IReportContainer reportContainer);
List<IExportColumn> CreateConvertedList(IReportContainer reportContainer,IExportContainer exportContainer);
List<IExportColumn> CreateConvertedList(IReportContainer reportContainer,IExportContainer exportContainer,Point position);
Size Measure(IExportColumn element);
void ArrangeContainer(IExportContainer exportContainer);
}
}

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

@ -33,7 +33,6 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -33,7 +33,6 @@ namespace ICSharpCode.Reporting.PageBuilder
public override void BuildExportList()
{
var m = base.ReportModel;
base.BuildExportList();
CurrentPage = CreateNewPage ();
WriteStandardSections();
@ -52,25 +51,22 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -52,25 +51,22 @@ namespace ICSharpCode.Reporting.PageBuilder
collectionSource.Bind();
CurrentLocation = DetailStart;
var converter = new DataContainerConverter(base.Graphics,ReportModel.DetailSection,
CurrentLocation,
collectionSource);
var position = ResetPosition();
var converter = new ContainerConverter(base.Graphics, CurrentLocation);
// var converter = new ContainerConverter(base.Graphics, position);
detail = CreateContainerForSection(DetailStart);
var position = Point.Empty;
do {
collectionSource.Fill(Container.Items);
var convertedItems = converter.Convert(detail,position);
var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection,detail,position);
if (PageFull(convertedItems)) {
detail.ExportedItems.AddRange(convertedItems);
CurrentPage.ExportedItems.Insert(2,detail);
Pages.Add(CurrentPage);
var aa = detail.GetArrangeStrategy();
aa.Arrange(detail);
position = Point.Empty;
MeasureAndArrangeContainer(converter,detail);
position = ResetPosition();
CurrentPage = CreateNewPage();
WriteStandardSections();
CurrentLocation = DetailStart;
@ -78,6 +74,7 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -78,6 +74,7 @@ namespace ICSharpCode.Reporting.PageBuilder
} else {
detail.ExportedItems.AddRange(convertedItems);
MeasureAndArrangeContainer(converter,detail);
position = new Point(Container.Location.Y,position.Y + Container.Size.Height);
}
}
@ -93,6 +90,15 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -93,6 +90,15 @@ namespace ICSharpCode.Reporting.PageBuilder
}
}
Point ResetPosition () {
return Point.Empty;
}
void MeasureAndArrangeContainer(ContainerConverter converter,IExportContainer detail)
{
converter.Measure(detail);
converter.ArrangeContainer(detail);
}
IExportContainer CreateContainerForSection(Point location )
{
@ -102,9 +108,9 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -102,9 +108,9 @@ namespace ICSharpCode.Reporting.PageBuilder
}
bool PageFull(System.Collections.Generic.List<IExportColumn> column)
bool PageFull(System.Collections.Generic.List<IExportColumn> columns)
{
var rect = new Rectangle(column[0].Location,column[0].Size);
var rect = new Rectangle(columns[0].Location,columns[0].Size);
if (rect.Contains(new Point(100,500))) {
return true;
}

29
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/ContainerConverterFixture.cs

@ -8,13 +8,11 @@ @@ -8,13 +8,11 @@
*/
using System;
using System.Drawing;
using ICSharpCode.Reporting.DataManager.Listhandling;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.Converter;
using NUnit.Framework;
using ICSharpCode.Reporting.Test.DataSource;
namespace ICSharpCode.Reporting.Test.PageBuilder
{
@ -26,8 +24,8 @@ namespace ICSharpCode.Reporting.Test.PageBuilder @@ -26,8 +24,8 @@ namespace ICSharpCode.Reporting.Test.PageBuilder
[Test]
public void ConverterReturnExportContainer() {
var converter = new ContainerConverter(graphics,container,new Point(30,30));
var result = converter.Convert();
var converter = new ContainerConverter(graphics,new Point(30,30));
var result = converter.Convert(container);
Assert.That(result,Is.InstanceOf(typeof(IExportContainer)));
}
@ -35,8 +33,10 @@ namespace ICSharpCode.Reporting.Test.PageBuilder @@ -35,8 +33,10 @@ namespace ICSharpCode.Reporting.Test.PageBuilder
[Test]
public void ConverterReturnExportContainerwithTwoItems()
{
var converter = new ContainerConverter(graphics,container,new Point(30,30));
var result = converter.Convert();
var converter = new ContainerConverter(graphics,new Point(30,30));
var result = converter.Convert(container);
var list = converter.CreateConvertedList(container,result,new Point(30,30));
result.ExportedItems.AddRange(list);
Assert.That(result.ExportedItems.Count,Is.EqualTo(2));
}
@ -44,30 +44,21 @@ namespace ICSharpCode.Reporting.Test.PageBuilder @@ -44,30 +44,21 @@ namespace ICSharpCode.Reporting.Test.PageBuilder
[Test]
public void LocationIsAdjusted() {
var location = new Point(30,30);
var converter = new ContainerConverter(graphics,container,location);
var result = converter.Convert();
var converter = new ContainerConverter(graphics,location);
var result = converter.Convert(container);
Assert.That(result.Location,Is.EqualTo(location));
}
[Test]
public void ParentInChildsIsSet () {
var converter = new ContainerConverter(graphics,container,container.Location);
var result = converter.Convert();
var converter = new ContainerConverter(graphics,container.Location);
var result = converter.Convert(container);
foreach (var element in result.ExportedItems) {
Assert.That(element.Parent,Is.Not.Null);
}
}
[Test]
public void bla () {
var contributorList = new ContributorsList();
var list = contributorList.ContributorCollection;
var cs = new CollectionSource(list,typeof(Contributor),new ReportSettings());
var converter = new DataContainerConverter(graphics,container,container.Location,cs);
converter.Convert();
}
[TestFixtureSetUp]
public void Init()
{

Loading…
Cancel
Save