Browse Source

Rewrite WpfVisitor.cs

reports
Peter Forstmeier 13 years ago
parent
commit
66a17be471
  1. 47
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ExportRenderer/FixedDocumentCreator.cs
  2. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/DebugExporter.cs
  3. 29
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs
  4. 38
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/WpfVisitor.cs
  5. 119
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs
  6. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs

47
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ExportRenderer/FixedDocumentCreator.cs

@ -29,15 +29,14 @@ namespace ICSharpCode.Reporting.ExportRenderer
/// </summary> /// </summary>
class FixedDocumentCreator class FixedDocumentCreator
{ {
BrushConverter brushConverter ; private readonly BrushConverter brushConverter ;
public FixedDocumentCreator() public FixedDocumentCreator()
{ {
brushConverter = new BrushConverter(); brushConverter = new BrushConverter();
} }
public static FixedPage CreateFixedPage(ExportPage exportPage) {
public static UIElement CreateFixedPage(ExportPage exportPage) {
var fixedPage = new FixedPage(); var fixedPage = new FixedPage();
fixedPage.Width = exportPage.Size.ToWpf().Width; fixedPage.Width = exportPage.Size.ToWpf().Width;
fixedPage.Height = exportPage.Size.ToWpf().Height; fixedPage.Height = exportPage.Size.ToWpf().Height;
@ -46,25 +45,19 @@ namespace ICSharpCode.Reporting.ExportRenderer
fixedPage.Background = new SolidColorBrush(System.Drawing.Color.Blue.ToWpf()); fixedPage.Background = new SolidColorBrush(System.Drawing.Color.Blue.ToWpf());
return fixedPage; return fixedPage;
} }
public UIElement CreateContainer(ExportContainer container)
{ public Canvas CreateContainer(ExportContainer container) {
var canvas = CreateCanvas(container); var canvas = CreateCanvas(container);
var size = container.DesiredSize.ToWpf(); var size = container.DesiredSize.ToWpf();
canvas.Measure(size); canvas.Measure(size);
canvas.Arrange(new Rect(new Point(),size )); canvas.Arrange(new Rect(new Point(),size ));
canvas.UpdateLayout(); canvas.UpdateLayout();
return canvas; return canvas;
} }
public TextBlock CreateTextBlock(ExportText exportText) public TextBlock CreateTextBlock(ExportText exportText){
{
var textBlock = new TextBlock(); var textBlock = new TextBlock();
textBlock.Foreground = ConvertBrush(exportText.ForeColor); textBlock.Foreground = ConvertBrush(exportText.ForeColor);
// textBlock.Background = ConvertBrush(exportText.BackColor); // textBlock.Background = ConvertBrush(exportText.BackColor);
@ -96,8 +89,7 @@ namespace ICSharpCode.Reporting.ExportRenderer
} }
static Size MeasureTextInWpf(ExportText exportText) static Size MeasureTextInWpf(ExportText exportText){
{
if (exportText.CanGrow) { if (exportText.CanGrow) {
@ -126,8 +118,7 @@ namespace ICSharpCode.Reporting.ExportRenderer
} }
Canvas CreateCanvas(ExportContainer container) Canvas CreateCanvas(ExportContainer container){
{
var canvas = new Canvas(); var canvas = new Canvas();
SetPositionAndSize(canvas,container); SetPositionAndSize(canvas,container);
@ -136,6 +127,7 @@ namespace ICSharpCode.Reporting.ExportRenderer
return canvas; return canvas;
} }
static void SetPositionAndSize(FrameworkElement element,ExportColumn column) { static void SetPositionAndSize(FrameworkElement element,ExportColumn column) {
if (column == null) if (column == null)
throw new ArgumentNullException("column"); throw new ArgumentNullException("column");
@ -143,8 +135,8 @@ namespace ICSharpCode.Reporting.ExportRenderer
SetDimension(element,column); SetDimension(element,column);
} }
static void SetDimension (FrameworkElement element,IExportColumn exportColumn)
{ static void SetDimension (FrameworkElement element,IExportColumn exportColumn){
element.Width = exportColumn.DesiredSize.Width; element.Width = exportColumn.DesiredSize.Width;
element.Height = exportColumn.DesiredSize.Height; element.Height = exportColumn.DesiredSize.Height;
} }
@ -156,13 +148,12 @@ namespace ICSharpCode.Reporting.ExportRenderer
} }
void SetFont(TextBlock textBlock,IExportText exportText) void SetFont(TextBlock textBlock,IExportText exportText){
{
textBlock.FontFamily = new FontFamily(exportText.Font.FontFamily.Name); textBlock.FontFamily = new FontFamily(exportText.Font.FontFamily.Name);
//http://www.codeproject.com/Articles/441009/Drawing-Formatted-Text-in-a-Windows-Forms-Applicat //http://www.codeproject.com/Articles/441009/Drawing-Formatted-Text-in-a-Windows-Forms-Applicat
textBlock.FontSize = exportText.Font.Size * 96/72; textBlock.FontSize = exportText.Font.Size * 96/72;
if (exportText.Font.Bold) { if (exportText.Font.Bold) {
textBlock.FontWeight = FontWeights.Bold; textBlock.FontWeight = FontWeights.Bold;
@ -180,8 +171,7 @@ textBlock.FontSize = exportText.Font.Size * 96/72;
} }
void CreateStrikeout (TextBlock textBlock,IExportText exportColumn ) void CreateStrikeout (TextBlock textBlock,IExportText exportColumn ){
{
if (textBlock == null) if (textBlock == null)
throw new ArgumentNullException("textBlock"); throw new ArgumentNullException("textBlock");
if (exportColumn == null) if (exportColumn == null)
@ -196,8 +186,7 @@ textBlock.FontSize = exportText.Font.Size * 96/72;
} }
void CreateUnderline(TextBlock textBlock,IExportText exportColumn) void CreateUnderline(TextBlock textBlock,IExportText exportColumn){
{
if (exportColumn == null) if (exportColumn == null)
throw new ArgumentNullException("exportColumn"); throw new ArgumentNullException("exportColumn");
if (textBlock == null) if (textBlock == null)
@ -210,8 +199,7 @@ textBlock.FontSize = exportText.Font.Size * 96/72;
} }
Pen CreateWpfPen(IReportObject exportColumn) Pen CreateWpfPen(IReportObject exportColumn){
{
if (exportColumn == null) if (exportColumn == null)
throw new ArgumentNullException("exportColumn"); throw new ArgumentNullException("exportColumn");
var myPen = new Pen(); var myPen = new Pen();
@ -221,8 +209,7 @@ textBlock.FontSize = exportText.Font.Size * 96/72;
} }
Brush ConvertBrush(System.Drawing.Color color) Brush ConvertBrush(System.Drawing.Color color){
{
if (brushConverter.IsValid(color.Name)){ if (brushConverter.IsValid(color.Name)){
return brushConverter.ConvertFromString(color.Name) as SolidColorBrush; return brushConverter.ConvertFromString(color.Name) as SolidColorBrush;
} else{ } else{

1
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/DebugExporter.cs

@ -34,7 +34,6 @@ namespace ICSharpCode.Reporting.Exporter
if (ac != null) { if (ac != null) {
visitor.Visit(page); visitor.Visit(page);
} }
// RunInternal("--",page);
Console.WriteLine("-----------PageBreak---------"); Console.WriteLine("-----------PageBreak---------");
} }
Console.WriteLine("Finish DebugVisitor"); Console.WriteLine("Finish DebugVisitor");

29
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs

@ -23,15 +23,18 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
evaluator = new ExpressionEvaluator(grammar); evaluator = new ExpressionEvaluator(grammar);
} }
public override void Visit(ExportPage page)
public override void Visit(ICSharpCode.Reporting.PageBuilder.ExportColumns.ExportText exportColumn)
{ {
var result = evaluator.Evaluate("2 + 3"); var result = evaluator.Evaluate("5 * 10");
Console.WriteLine("\t\tExpressionVisitor <{0}> - {1}",exportColumn.Name,result); Console.WriteLine("ExpressionVisitor page <{0}> {1}",page.PageInfo.PageNumber,result);
foreach (var element in page.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
} }
public override void Visit(ICSharpCode.Reporting.PageBuilder.ExportColumns.ExportContainer exportColumn) public override void Visit(ExportContainer exportColumn)
{ {
var result = evaluator.Evaluate("2 * 10"); var result = evaluator.Evaluate("2 * 10");
Console.WriteLine("\tExpressionVisitor <{0}> - {1}",exportColumn.Name,result); Console.WriteLine("\tExpressionVisitor <{0}> - {1}",exportColumn.Name,result);
@ -43,17 +46,11 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
} }
} }
public override void Visit(ICSharpCode.Reporting.PageBuilder.ExportColumns.ExportPage page)
public override void Visit(ExportText exportColumn)
{ {
var result = evaluator.Evaluate("5 * 10"); var result = evaluator.Evaluate("2 + 3");
Console.WriteLine("ExpressionVisitor page <{0}> {1}",page.PageInfo.PageNumber,result); Console.WriteLine("\t\tExpressionVisitor <{0}> - {1}",exportColumn.Name,result);
foreach (var element in page.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
// Console.WriteLine("ExpressionVisitor <{0} - {1}>",exportColumn.Name,result);
} }
} }
} }

38
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/WpfVisitor.cs

@ -9,6 +9,7 @@
using System; using System;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Documents;
using ICSharpCode.Reporting.ExportRenderer; using ICSharpCode.Reporting.ExportRenderer;
using ICSharpCode.Reporting.PageBuilder.ExportColumns; using ICSharpCode.Reporting.PageBuilder.ExportColumns;
@ -18,38 +19,51 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
/// <summary> /// <summary>
/// Description of WpfVisitor. /// Description of WpfVisitor.
/// </summary> /// </summary>
class WpfVisitor: AbstractVisitor ///
{ class WpfVisitor: AbstractVisitor {
private readonly FixedDocumentCreator documentCreator; private readonly FixedDocumentCreator documentCreator;
FixedPage fixedPage;
Canvas currentCanvas;
public WpfVisitor() public WpfVisitor()
{ {
documentCreator = new FixedDocumentCreator(); documentCreator = new FixedDocumentCreator();
} }
public override void Visit(ExportPage page) public override void Visit(ExportPage page)
{ {
UIElement = FixedDocumentCreator.CreateFixedPage(page); Console.WriteLine("WpfVisitor page <{0}>",page.PageInfo.PageNumber);
fixedPage = FixedDocumentCreator.CreateFixedPage(page);
FixedPage = fixedPage;
foreach (var element in page.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
} }
public override void Visit(ExportContainer exportColumn) public override void Visit(ExportContainer exportColumn)
{ {
var canvas = (Canvas)documentCreator.CreateContainer(exportColumn);
CanvasHelper.SetPosition(canvas,new Point(exportColumn.Location.X,exportColumn.Location.Y)); Console.WriteLine("\tWpfVisitor <{0}>",exportColumn.Name);
UIElement = canvas; currentCanvas = documentCreator.CreateContainer(exportColumn);
CanvasHelper.SetPosition(currentCanvas,new Point(exportColumn.Location.X,exportColumn.Location.Y));
foreach (var element in exportColumn.ExportedItems) {
var ac = element as IAcceptor;
ac.Accept(this);
}
fixedPage.Children.Add(currentCanvas);
} }
public override void Visit(ExportText exportColumn) public override void Visit(ExportText exportColumn)
{ {
TextBlock textBlock = documentCreator.CreateTextBlock(exportColumn); Console.WriteLine("\t\tExpressionVisitor <{0}>",exportColumn.Name);
var textBlock = documentCreator.CreateTextBlock(exportColumn);
CanvasHelper.SetPosition(textBlock,new Point(exportColumn.Location.X,exportColumn.Location.Y)); CanvasHelper.SetPosition(textBlock,new Point(exportColumn.Location.X,exportColumn.Location.Y));
UIElement = textBlock; currentCanvas.Children.Add(textBlock);
} }
public FixedPage FixedPage {get; private set;}
public UIElement UIElement {get; private set;}
} }
} }

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

@ -8,131 +8,50 @@
*/ */
using System; using System;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents; using System.Windows.Documents;
using System.Windows.Markup; using System.Windows.Markup;
using ICSharpCode.Reporting.BaseClasses;
using ICSharpCode.Reporting.Exporter.Visitors; using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.PageBuilder.ExportColumns; using ICSharpCode.Reporting.PageBuilder.ExportColumns;
namespace ICSharpCode.Reporting.Exporter namespace ICSharpCode.Reporting.Exporter{
{
/// <summary> /// <summary>
/// Description of PrintExporter. /// Description of PrintExporter.
/// </summary> /// </summary>
public class WpfExporter:BaseExporter ///
{ class WpfExporter:BaseExporter {
WpfVisitor visitor;
FixedPage fixedPage; private readonly WpfVisitor visitor;
public WpfExporter(Collection<ExportPage> pages):base(pages) public WpfExporter(Collection<ExportPage> pages):base(pages){
{
visitor = new WpfVisitor(); visitor = new WpfVisitor();
} }
public override void Run () { public override void Run () {
Document = new FixedDocument(); Document = new FixedDocument();
Console.WriteLine();
Console.WriteLine("Start WpfExporter with {0} Pages ",Pages.Count);
foreach (var page in Pages) { foreach (var page in Pages) {
InternalRun(page); IAcceptor acceptor = page as IAcceptor;
AddPageToDocument(Document,fixedPage); if (acceptor != null) {
} visitor.Visit(page);
}
void InternalRun(ExportPage page)
{
page.Accept(visitor);
fixedPage = (FixedPage)visitor.UIElement;
foreach (var item in page.ExportedItems) {
ShowContainerRecursive(null,item);
}
}
void ShowContainerRecursive(Canvas parentCanvas,IExportColumn item)
{
var exportContainer = item as IExportContainer;
Canvas containerCanvas = null;
if (exportContainer != null) {
if (exportContainer.Name =="ReportDetail") {
Console.WriteLine("Section {0}",item.Name);
exportContainer.BackColor = System.Drawing.Color.LightBlue;
}
if (exportContainer.Name == "Row") {
Console.WriteLine(item.Name);
}
if (parentCanvas == null) {
containerCanvas = CreateContainer(fixedPage,exportContainer);
// Console.WriteLine("Section {0} at {1} size {2}",item.Name,CanvasHelper.GetPosition(containerCanvas),containerCanvas.DesiredSize);
fixedPage.Children.Add(containerCanvas);
parentCanvas = containerCanvas;
} else {
containerCanvas = CreateContainer(parentCanvas,exportContainer);
// Console.WriteLine("Row {0} at {1}",item.Name,CanvasHelper.GetPosition(containerCanvas));
parentCanvas.Children.Add(containerCanvas);
} }
AddPageToDocument(Document,visitor.FixedPage);
// Console.WriteLine("canvas at {0}",CanvasHelper.GetPosition(containerCanvas)); Console.WriteLine("-----------PageBreak---------");
foreach (var element in exportContainer.ExportedItems) {
if (!IsContainer(element)) {
var singleItem = CreateSingleEntry(containerCanvas,element);
// Console.WriteLine("TEST {0} - {1}",CanvasHelper.GetPosition(singleItem),CanvasHelper.GetPosition(containerCanvas));
containerCanvas.Children.Add(singleItem);
}
ShowContainerRecursive(parentCanvas,element);
}
}
}
static bool IsContainer (IExportColumn column) {
var container = column as IExportContainer;
if (container == null) {
return false;
} }
return true; Console.WriteLine("Finish WpfVisitor");
Console.WriteLine();
} }
Canvas CreateContainer(UIElement parent,IExportContainer exportContainer) static void AddPageToDocument(FixedDocument fixedDocument,FixedPage page){
{
var acceptor = exportContainer as IAcceptor;
acceptor.Accept(visitor);
var canvas = (Canvas)visitor.UIElement;
return canvas;
}
UIElement CreateSingleEntry(UIElement parent, IExportColumn element)
{
var acceptor = element as IAcceptor;
acceptor.Accept(visitor);
var uiElement = visitor.UIElement;
return uiElement;
}
static void AddPageToDocument(FixedDocument fixedDocument,FixedPage page)
{
PageContent pageContent = new PageContent(); PageContent pageContent = new PageContent();
((IAddChild)pageContent).AddChild(page); ((IAddChild)pageContent).AddChild(page);
fixedDocument.Pages.Add(pageContent); fixedDocument.Pages.Add(pageContent);
} }
public FixedDocument Document {get;private set;} public FixedDocument Document {get;private set;}
} }
} }

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

@ -35,6 +35,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer
Document = CreateFixedDocument(reportSettings); Document = CreateFixedDocument(reportSettings);
// var wpfExporter = new old_WpfExporter(pages);
var wpfExporter = new WpfExporter(pages); var wpfExporter = new WpfExporter(pages);
wpfExporter.Run(); wpfExporter.Run();
this.document = wpfExporter.Document; this.document = wpfExporter.Document;

Loading…
Cancel
Save