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 @@ -29,15 +29,14 @@ namespace ICSharpCode.Reporting.ExportRenderer
/// </summary>
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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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; @@ -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; @@ -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; @@ -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; @@ -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{

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

@ -34,7 +34,6 @@ namespace ICSharpCode.Reporting.Exporter @@ -34,7 +34,6 @@ namespace ICSharpCode.Reporting.Exporter
if (ac != null) {
visitor.Visit(page);
}
// RunInternal("--",page);
Console.WriteLine("-----------PageBreak---------");
}
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 @@ -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 @@ -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);
}
}
}

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

@ -9,6 +9,7 @@ @@ -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 @@ -18,38 +19,51 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
/// <summary>
/// Description of WpfVisitor.
/// </summary>
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;}
}
}

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

@ -8,131 +8,50 @@ @@ -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{
/// <summary>
/// Description of PrintExporter.
/// </summary>
public class WpfExporter:BaseExporter
{
WpfVisitor visitor;
FixedPage fixedPage;
///
class WpfExporter:BaseExporter {
private readonly WpfVisitor visitor;
public WpfExporter(Collection<ExportPage> pages):base(pages)
{
public WpfExporter(Collection<ExportPage> 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;}
}
}

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

@ -35,6 +35,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer @@ -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;

Loading…
Cancel
Save