Browse Source

PageBreak

reports
Peter Forstmeier 13 years ago
parent
commit
61ab0d7ba0
  1. 76
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs
  2. 12
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs
  3. 4
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs
  4. 8
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/DataContainerConverter.cs
  5. 57
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs
  6. 20
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs
  7. 5
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs
  8. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/FormBuilderFixture.cs
  9. 4
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs

76
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs

@ -11,6 +11,7 @@ using System.Collections.ObjectModel; @@ -11,6 +11,7 @@ using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Markup;
using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Interfaces.Export;
@ -35,31 +36,21 @@ namespace ICSharpCode.Reporting.Exporter @@ -35,31 +36,21 @@ namespace ICSharpCode.Reporting.Exporter
visitor = new WpfVisitor(reportSettings);
}
public override void Run () {
InitFixedPage();
Document = new FixedDocument();
foreach (var page in Pages) {
InternalRun(page);
var fixedPage = InternalRun(page);
AddPageToDocument(Document,fixedPage);
}
}
void InitFixedPage()
{
fixedPage = new FixedPage();
fixedPage.Width = reportSettings.PageSize.Width;
fixedPage.Height = reportSettings.PageSize.Height;
}
FixedPage fixedPage;
public FixedPage FixedPage {
get { return fixedPage; }
}
void InternalRun(IExportContainer container)
FixedPage InternalRun(IExportContainer container)
{
FixedPage fixedPage = CreateFixedPage();
Canvas canvas = null ;
foreach (var item in container.ExportedItems) {
var exportContainer = item as IExportContainer;
@ -76,28 +67,39 @@ namespace ICSharpCode.Reporting.Exporter @@ -76,28 +67,39 @@ namespace ICSharpCode.Reporting.Exporter
Canvas.SetTop(ui, ((IExportColumn)element).Location.Y);
canvas.Children.Add(ui);
}
// var size = new Size(exportContainer.DesiredSize.Width,exportContainer.DesiredSize.Height);
// canvas.Measure(size);
// canvas.Arrange(new Rect(new System.Windows.Point(exportContainer.Location.X,exportContainer.Location.Y),size ));
// canvas.UpdateLayout();
// var exportArrange = exportContainer.GetArrangeStrategy();
// exportArrange.Arrange(exportContainer);
}
// InternalRun(item as IExportContainer);
} else {
if (acceptor != null) {
Console.WriteLine("..Item...");
acceptor.Accept(visitor);
var uiElement = visitor.UIElement;
if (canvas != null) {
Canvas.SetLeft(uiElement, item.Location.X - exportContainer.Location.X);
Canvas.SetTop(uiElement, item.Location.Y - exportContainer.Location.Y);
canvas.Children.Add(uiElement);
} else {
if (acceptor != null) {
acceptor.Accept(visitor);
var uiElement = visitor.UIElement;
if (canvas != null) {
Canvas.SetLeft(uiElement, item.Location.X - exportContainer.Location.X);
Canvas.SetTop(uiElement, item.Location.Y - exportContainer.Location.Y);
canvas.Children.Add(uiElement);
}
fixedPage.Children.Add(uiElement);
}
fixedPage.Children.Add(uiElement);
}
}
}
return fixedPage;
}
FixedPage CreateFixedPage()
{
var fixedPage = new FixedPage();
fixedPage.Width = reportSettings.PageSize.Width;
fixedPage.Height = reportSettings.PageSize.Height;
return fixedPage;
}
static void AddPageToDocument(FixedDocument fixedDocument,FixedPage page)
{
PageContent pageContent = new PageContent();
((IAddChild)pageContent).AddChild(page);
fixedDocument.Pages.Add(pageContent);
}
public FixedDocument Document {get;private set;}
}
}

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

@ -56,7 +56,6 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -56,7 +56,6 @@ namespace ICSharpCode.Reporting.PageBuilder
protected void BuildPageHeader()
{
var pageHeader = CreateSection(ReportModel.PageHeader,CurrentLocation);
DetailStart = new Point(ReportModel.ReportSettings.LeftMargin,pageHeader.Location.Y + pageHeader.Size.Height +1);
AddSectionToPage(pageHeader);
@ -70,7 +69,6 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -70,7 +69,6 @@ namespace ICSharpCode.Reporting.PageBuilder
ReportModel.ReportSettings.PageSize.Height - ReportModel.ReportSettings.BottomMargin - ReportModel.PageFooter.Size.Height);
var pageFooter = CreateSection(ReportModel.PageFooter,CurrentLocation);
Console.WriteLine("pageFooterStartAt {0}",pageFooter.Location);
DetailEnds = new Point(pageFooter.Location.X,pageFooter.Location.Y -1);
AddSectionToPage(pageFooter);
}
@ -89,18 +87,20 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -89,18 +87,20 @@ namespace ICSharpCode.Reporting.PageBuilder
#endregion
protected virtual void WritePages()
protected virtual IPage CreateNewPage()
{
CurrentPage = InitNewPage();
var page = InitNewPage();
CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.TopMargin);
return page;
}
protected void WriteStandardSections() {
this.BuildReportHeader();
BuildPageHeader();
BuildPageFooter();
BuildReportFooter();
}
protected IExportContainer CreateSection(IReportContainer section,Point location)
{
var containerConverter = new ContainerConverter(Graphics, section, location);

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

@ -72,7 +72,7 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter @@ -72,7 +72,7 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter
exportColumn.Location = new Point(element.Location.X,element.Location.Y + position.Y);
exportColumn.DesiredSize = Measure(element);
itemsList.Add(exportColumn);
Console.WriteLine("Size {0} DesiredSize {1}", exportColumn.Size, exportColumn.DesiredSize);
// Console.WriteLine("Size {0} DesiredSize {1}", exportColumn.Size, exportColumn.DesiredSize);
}
return itemsList;
}
@ -86,7 +86,7 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter @@ -86,7 +86,7 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter
protected void ArrangeContainer(ExportContainer exportContainer)
{
Console.WriteLine("calling Container-Arrange");
// Console.WriteLine("calling Container-Arrange");
var exportArrange = exportContainer.GetArrangeStrategy();
exportArrange.Arrange(exportContainer);
}

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

@ -79,11 +79,11 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter @@ -79,11 +79,11 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter
*/
public List<IExportColumn> Convert(ExportContainer container,Point position){
Console.WriteLine("");
Console.WriteLine("start CurrentLocation {0}",CurrentLocation);
// Console.WriteLine("");
// Console.WriteLine("start CurrentLocation {0}",CurrentLocation);
var itemsList = CreateConvertedList(container,position);
Console.WriteLine("end CurrentLocation {0}",CurrentLocation);
Console.WriteLine("");
// Console.WriteLine("end CurrentLocation {0}",CurrentLocation);
// Console.WriteLine("");
return itemsList;
}
}

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

@ -34,7 +34,10 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -34,7 +34,10 @@ namespace ICSharpCode.Reporting.PageBuilder
public override void BuildExportList()
{
base.BuildExportList();
WritePages ();
CurrentPage = CreateNewPage ();
WriteStandardSections();
BuildDetail();
base.AddPage(CurrentPage);
}
@ -51,33 +54,65 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -51,33 +54,65 @@ namespace ICSharpCode.Reporting.PageBuilder
var converter = new DataContainerConverter(base.Graphics,ReportModel.DetailSection,
CurrentLocation,
collectionSource);
detail = (ExportContainer)Container.CreateExportColumn();
detail.Location = CurrentLocation;
detail = CreateContainerForSection();
var position = Point.Empty;
do {
collectionSource.Fill(Container.Items);
var r = converter.Convert(Container as ExportContainer,position);
detail.ExportedItems.AddRange(r);
position = new Point(Container.Location.Y,position.Y + Container.Size.Height);
if (ExeedPage(r)) {
detail.ExportedItems.AddRange(r);
CurrentPage.ExportedItems.Insert(2,detail);
Pages.Add(CurrentPage);
// CurrentLocation = DetailStart;
position = Point.Empty;
CurrentPage = CreateNewPage();
WriteStandardSections();
CurrentLocation = DetailStart;
detail = CreateContainerForSection();
} else {
detail.ExportedItems.AddRange(r);
position = new Point(Container.Location.Y,position.Y + Container.Size.Height);
}
}
while (collectionSource.MoveNext());
if (Pages.Count == 0) {
CurrentPage.ExportedItems.Insert(2,detail);
} else {
CurrentPage.ExportedItems.Insert(1,detail);
}
var a = base.Pages;
} else {
detail = base.CreateSection(Container,CurrentLocation);
}
CurrentPage.ExportedItems.Insert(2,detail);
}
IExportContainer CreateContainerForSection( )
{
var detail = (ExportContainer)Container.CreateExportColumn();
detail.Location = CurrentLocation;
return detail;
}
protected override void WritePages()
bool ExeedPage(System.Collections.Generic.List<IExportColumn> r)
{
base.WritePages();
BuildDetail();
base.AddPage(CurrentPage);
var rect = new Rectangle(r[0].Location,r[0].Size);
if (rect.Contains(new Point(100,500))) {
Console.WriteLine("PageBreak");
return true;
}
Console.WriteLine("contains {0} - {1}",rect,DetailEnds);
return false;
}
internal IReportContainer Container { get; private set; }
public IEnumerable List {get; private set;}

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

@ -28,7 +28,10 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -28,7 +28,10 @@ namespace ICSharpCode.Reporting.PageBuilder
public override void BuildExportList()
{
base.BuildExportList();
WritePages ();
CurrentPage = CreateNewPage ();
WriteStandardSections();
BuilDetail();
base.AddPage(CurrentPage);
}
@ -42,12 +45,13 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -42,12 +45,13 @@ namespace ICSharpCode.Reporting.PageBuilder
}
protected override void WritePages()
{
base.WritePages();
BuilDetail();
base.AddPage(CurrentPage);
Console.WriteLine("------{0}---------",ReportModel.ReportSettings.PageSize);
}
// protected override void CreatePage()
// {
// CurrentPage = base.CreatePage();
//// WriteStandardSections();
//// BuilDetail();
//// base.AddPage(CurrentPage);
// Console.WriteLine("------{0}---------",ReportModel.ReportSettings.PageSize);
// }
}
}

5
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs

@ -39,8 +39,9 @@ namespace ICSharpCode.Reporting.WpfReportViewer @@ -39,8 +39,9 @@ namespace ICSharpCode.Reporting.WpfReportViewer
Document.DocumentPaginator.PageSize = new System.Windows.Size(reportSettings.PageSize.Width,reportSettings.PageSize.Height);
var wpfExporter = new WpfExporter(reportSettings,pages);
wpfExporter.Run();
var fixedPage = wpfExporter.FixedPage;
AddPageToDocument(Document,fixedPage);
// var fixedPage = wpfExporter.FixedPage;
// AddPageToDocument(Document,fixedPage);
this.Document = wpfExporter.Document;
}
static void AddPageToDocument(FixedDocument fixedDocument,FixedPage page)

1
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/FormBuilderFixture.cs

@ -59,6 +59,7 @@ namespace ICSharpCode.Reporting.Test.PageBuilder @@ -59,6 +59,7 @@ namespace ICSharpCode.Reporting.Test.PageBuilder
formPageBuilder.BuildExportList();
var page = formPageBuilder.Pages[0];
var pageFooter = page.ExportedItems[3];
var x = formPageBuilder.DetailEnds;
Assert.That(formPageBuilder.DetailEnds,
Is.EqualTo(new Point(pageFooter.Location.X,
pageFooter.Location.Y - 1)));

4
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs

@ -58,8 +58,8 @@ namespace ICSharpCode.Reporting.Test.Reportingfactory @@ -58,8 +58,8 @@ namespace ICSharpCode.Reporting.Test.Reportingfactory
var result = section.ExportedItems[0];
Assert.That(result,Is.AssignableFrom(typeof(ExportText)));
Console.WriteLine("-------PageLayoutFixture:ShowDebug---------");
var ex = new DebugExporter(reportCreator.Pages);
ex.Run();
// var ex = new DebugExporter(reportCreator.Pages);
// ex.Run();
}

Loading…
Cancel
Save