From 66a17be4719f37c1363243811c39faf9e571a134 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Wed, 25 Sep 2013 20:25:11 +0200 Subject: [PATCH] Rewrite WpfVisitor.cs --- .../ExportRenderer/FixedDocumentCreator.cs | 47 +++---- .../Src/Exporter/DebugExporter.cs | 1 - .../Exporter/Visitors/ExpressionVisitor.cs | 29 ++--- .../Src/Exporter/Visitors/WpfVisitor.cs | 38 ++++-- .../Src/Exporter/WpfExporter.cs | 119 +++--------------- .../Src/Wpf/PreviewViewModel.cs | 1 + 6 files changed, 76 insertions(+), 159 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ExportRenderer/FixedDocumentCreator.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ExportRenderer/FixedDocumentCreator.cs index c5873227d5..dd3e09e426 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ExportRenderer/FixedDocumentCreator.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ExportRenderer/FixedDocumentCreator.cs @@ -29,15 +29,14 @@ namespace ICSharpCode.Reporting.ExportRenderer /// class FixedDocumentCreator { - BrushConverter brushConverter ; + private readonly BrushConverter brushConverter ; public FixedDocumentCreator() { brushConverter = new BrushConverter(); } - - public static UIElement CreateFixedPage(ExportPage exportPage) { + public static FixedPage CreateFixedPage(ExportPage exportPage) { var fixedPage = new FixedPage(); fixedPage.Width = exportPage.Size.ToWpf().Width; fixedPage.Height = exportPage.Size.ToWpf().Height; @@ -46,25 +45,19 @@ namespace ICSharpCode.Reporting.ExportRenderer fixedPage.Background = new SolidColorBrush(System.Drawing.Color.Blue.ToWpf()); return fixedPage; } - - public UIElement CreateContainer(ExportContainer container) - { + + public Canvas CreateContainer(ExportContainer container) { var canvas = CreateCanvas(container); var size = container.DesiredSize.ToWpf(); canvas.Measure(size); - canvas.Arrange(new Rect(new Point(),size )); - canvas.UpdateLayout(); - return canvas; - } - public TextBlock CreateTextBlock(ExportText exportText) - { + public TextBlock CreateTextBlock(ExportText exportText){ var textBlock = new TextBlock(); textBlock.Foreground = ConvertBrush(exportText.ForeColor); // 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) { @@ -126,8 +118,7 @@ namespace ICSharpCode.Reporting.ExportRenderer } - Canvas CreateCanvas(ExportContainer container) - { + Canvas CreateCanvas(ExportContainer container){ var canvas = new Canvas(); SetPositionAndSize(canvas,container); @@ -136,6 +127,7 @@ namespace ICSharpCode.Reporting.ExportRenderer return canvas; } + static void SetPositionAndSize(FrameworkElement element,ExportColumn column) { if (column == null) throw new ArgumentNullException("column"); @@ -143,8 +135,8 @@ namespace ICSharpCode.Reporting.ExportRenderer SetDimension(element,column); } - static void SetDimension (FrameworkElement element,IExportColumn exportColumn) - { + + static void SetDimension (FrameworkElement element,IExportColumn exportColumn){ element.Width = exportColumn.DesiredSize.Width; 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); -//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) { 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) throw new ArgumentNullException("textBlock"); 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) throw new ArgumentNullException("exportColumn"); 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) throw new ArgumentNullException("exportColumn"); 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)){ return brushConverter.ConvertFromString(color.Name) as SolidColorBrush; } else{ diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/DebugExporter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/DebugExporter.cs index aa0621b93a..01cc151773 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/DebugExporter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/DebugExporter.cs @@ -34,7 +34,6 @@ namespace ICSharpCode.Reporting.Exporter if (ac != null) { visitor.Visit(page); } -// RunInternal("--",page); Console.WriteLine("-----------PageBreak---------"); } Console.WriteLine("Finish DebugVisitor"); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs index 3c6745f1b6..c06c606953 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs @@ -23,15 +23,18 @@ namespace ICSharpCode.Reporting.Exporter.Visitors evaluator = new ExpressionEvaluator(grammar); } - - public override void Visit(ICSharpCode.Reporting.PageBuilder.ExportColumns.ExportText exportColumn) + public override void Visit(ExportPage page) { - var result = evaluator.Evaluate("2 + 3"); - Console.WriteLine("\t\tExpressionVisitor <{0}> - {1}",exportColumn.Name,result); - + var result = evaluator.Evaluate("5 * 10"); + 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"); 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"); - Console.WriteLine("ExpressionVisitor page <{0}> {1}",page.PageInfo.PageNumber,result); - foreach (var element in page.ExportedItems) { - var ac = element as IAcceptor; - ac.Accept(this); - } - -// Console.WriteLine("ExpressionVisitor <{0} - {1}>",exportColumn.Name,result); - + var result = evaluator.Evaluate("2 + 3"); + Console.WriteLine("\t\tExpressionVisitor <{0}> - {1}",exportColumn.Name,result); } } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/WpfVisitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/WpfVisitor.cs index 1d92225619..6c11228db9 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/WpfVisitor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/WpfVisitor.cs @@ -9,6 +9,7 @@ using System; using System.Windows; using System.Windows.Controls; +using System.Windows.Documents; using ICSharpCode.Reporting.ExportRenderer; using ICSharpCode.Reporting.PageBuilder.ExportColumns; @@ -18,38 +19,51 @@ namespace ICSharpCode.Reporting.Exporter.Visitors /// /// Description of WpfVisitor. /// - class WpfVisitor: AbstractVisitor - { + /// + class WpfVisitor: AbstractVisitor { + private readonly FixedDocumentCreator documentCreator; + FixedPage fixedPage; + Canvas currentCanvas; public WpfVisitor() { documentCreator = new FixedDocumentCreator(); } - 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) { - var canvas = (Canvas)documentCreator.CreateContainer(exportColumn); - CanvasHelper.SetPosition(canvas,new Point(exportColumn.Location.X,exportColumn.Location.Y)); - UIElement = canvas; + + Console.WriteLine("\tWpfVisitor <{0}>",exportColumn.Name); + 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) { - 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)); - UIElement = textBlock; + currentCanvas.Children.Add(textBlock); } - - public UIElement UIElement {get; private set;} + public FixedPage FixedPage {get; private set;} } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs index 376edcd645..285a048faf 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs @@ -8,131 +8,50 @@ */ using System; using System.Collections.ObjectModel; -using System.Windows; -using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Markup; -using ICSharpCode.Reporting.BaseClasses; + using ICSharpCode.Reporting.Exporter.Visitors; -using ICSharpCode.Reporting.Interfaces.Export; using ICSharpCode.Reporting.PageBuilder.ExportColumns; -namespace ICSharpCode.Reporting.Exporter -{ +namespace ICSharpCode.Reporting.Exporter{ /// /// Description of PrintExporter. /// - public class WpfExporter:BaseExporter - { - WpfVisitor visitor; - FixedPage fixedPage; + /// + class WpfExporter:BaseExporter { + + private readonly WpfVisitor visitor; - public WpfExporter(Collection pages):base(pages) - { + public WpfExporter(Collection pages):base(pages){ visitor = new WpfVisitor(); } - + public override void Run () { Document = new FixedDocument(); + Console.WriteLine(); + Console.WriteLine("Start WpfExporter with {0} Pages ",Pages.Count); foreach (var page in Pages) { - InternalRun(page); - AddPageToDocument(Document,fixedPage); - } - } - - - 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); + IAcceptor acceptor = page as IAcceptor; + if (acceptor != null) { + visitor.Visit(page); } - -// Console.WriteLine("canvas at {0}",CanvasHelper.GetPosition(containerCanvas)); - - 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; + AddPageToDocument(Document,visitor.FixedPage); + Console.WriteLine("-----------PageBreak---------"); } - return true; + Console.WriteLine("Finish WpfVisitor"); + Console.WriteLine(); } - Canvas CreateContainer(UIElement parent,IExportContainer exportContainer) - { - 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) - { + 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;} } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs index 19e6b0e3f0..4ff4944592 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs @@ -35,6 +35,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer Document = CreateFixedDocument(reportSettings); +// var wpfExporter = new old_WpfExporter(pages); var wpfExporter = new WpfExporter(pages); wpfExporter.Run(); this.document = wpfExporter.Document;