Browse Source

Rectangle can be used as Container for Items

pull/478/head
Peter Forstmeier 12 years ago
parent
commit
f5d110020f
  1. 22
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportRectangle.cs
  2. 66
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/FixedDocumentCreator.cs
  3. 79
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs

22
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportRectangle.cs

@ -17,36 +17,16 @@ @@ -17,36 +17,16 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Drawing.Drawing2D;
using ICSharpCode.Reporting.Arrange;
using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Interfaces.Export;
namespace ICSharpCode.Reporting.PageBuilder.ExportColumns
{
/// <summary>
/// Description of ExportRectangle.
/// </summary>
public class ExportRectangle:ExportContainer,IExportGraphics,IAcceptor
public class ExportRectangle:ExportContainer,IExportGraphics
{
public ExportRectangle() {
ExportedItems = new List<IExportColumn>();
}
public void Accept(IVisitor visitor)
{
visitor.Visit(this);
}
public List<IExportColumn> ExportedItems {get;private set;}
// public override IMeasurementStrategy MeasurementStrategy()
// {
// throw new NotImplementedException();
// }
public int Thickness {get;set;}
public DashStyle DashStyle {get;set;}

66
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/FixedDocumentCreator.cs

@ -53,76 +53,12 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor @@ -53,76 +53,12 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
public static Canvas CreateContainer(ExportContainer container) {
var canvas = CreateCanvas(container);
var size = container.DesiredSize.ToWpf();
CanvasHelper.SetPosition(canvas,new Point(container.Location.X,container.Location.Y));
canvas.Measure(size);
canvas.Arrange(new Rect(new Point(),size ));
canvas.UpdateLayout();
return canvas;
}
/*
public static TextBlock CreateTextBlock(ExportText exportText,bool setBackcolor){
var textBlock = new TextBlock();
textBlock.Foreground = ConvertBrush(exportText.ForeColor);
if (setBackcolor) {
textBlock.Background = ConvertBrush(exportText.BackColor);
}
SetFont(textBlock,exportText);
textBlock.TextWrapping = TextWrapping.Wrap;
CheckForNewLine (textBlock,exportText);
SetContentAlignment(textBlock,exportText);
MeasureTextBlock (textBlock,exportText);
return textBlock;
}
*/
/*
static void CheckForNewLine(TextBlock textBlock,ExportText exportText) {
string [] inlines = exportText.Text.Split(Environment.NewLine.ToCharArray());
for (int i = 0; i < inlines.Length; i++) {
if (inlines[i].Length > 0) {
textBlock.Inlines.Add(new Run(inlines[i]));
textBlock.Inlines.Add(new LineBreak());
}
}
var li = textBlock.Inlines.LastInline;
textBlock.Inlines.Remove(li);
}
static void MeasureTextBlock(TextBlock textBlock,ExportText exportText)
{
var wpfSize = MeasureTextInWpf(exportText);
textBlock.Width = wpfSize.Width;
textBlock.Height = wpfSize.Height;
}
*/
/*
static Size MeasureTextInWpf(ExportText exportText){
if (exportText.CanGrow) {
var formattedText = NewMethod(exportText);
formattedText.MaxTextWidth = exportText.DesiredSize.Width * 96.0 / 72.0;
formattedText.SetFontSize(Math.Floor(exportText.Font.Size * 96.0 / 72.0));
var size = new Size {
Width = formattedText.WidthIncludingTrailingWhitespace,
Height = formattedText.Height + 6};
return size;
}
return new Size(exportText.Size.Width,exportText.Size.Height);
}
*/
public static FormattedText CreateFormattedText(ExportText exportText)

79
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs

@ -17,16 +17,17 @@ @@ -17,16 +17,17 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;
using ICSharpCode.Reporting.BaseClasses;
using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using ICSharpCode.Reporting.WpfReportViewer.Visitor.Graphics;
using System.Windows.Shapes;
namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
{
@ -54,45 +55,49 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor @@ -54,45 +55,49 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
public override void Visit(ExportContainer exportContainer){
sectionCanvas = FixedDocumentCreator.CreateContainer(exportContainer);
sectionCanvas.Name = exportContainer.Name;
CanvasHelper.SetPosition(sectionCanvas,new Point(exportContainer.Location.X,exportContainer.Location.Y));
PerformList(sectionCanvas,exportContainer.ExportedItems);
sectionCanvas = RenderSectionContainer(exportContainer);
}
void PerformList(Canvas myCanvas, List<IExportColumn> exportedItems)
{
foreach (var element in exportedItems) {
var container = element as ExportContainer;
if (container != null) {
var containerCanvas = FixedDocumentCreator.CreateContainer(container);
CanvasHelper.SetPosition(containerCanvas,new Point(container.Location.X,container.Location.Y));
if (container is ExportRectangle) {
DrawRectangleAsContainer(container);
containerCanvas.Children.Add(UIElement);
myCanvas.Children.Add(containerCanvas);
} else {
// var containerCanvas = FixedDocumentCreator.CreateContainer(container);
// CanvasHelper.SetPosition(containerCanvas,new Point(container.Location.X,container.Location.Y));
myCanvas.Children.Add(containerCanvas);
PerformList(containerCanvas,container.ExportedItems);
Canvas RenderSectionContainer (ExportContainer container) {
var canvas = FixedDocumentCreator.CreateContainer(container);
foreach (var element in container.ExportedItems) {
if (IsContainer(element)) {
if (element is ExportRectangle) {
var graphContainer = RenderGraphicsContainer((IExportContainer)element);
canvas.Children.Add(graphContainer);
}
} else {
var acceptor = element as IAcceptor;
acceptor.Accept(this);
myCanvas.Children.Add(UIElement);
canvas.Children.Add(UIElement);
}
}
canvas.Background = FixedDocumentCreator.ConvertBrush(container.BackColor);
return canvas;
}
void DrawRectangleAsContainer(ExportContainer container)
bool IsContainer (IExportColumn column) {
return (column is ExportContainer)|| (column is ExportRectangle);
}
Canvas RenderGraphicsContainer(IExportContainer container)
{
var rect = container as ExportRectangle;
var graphCanvas = FixedDocumentCreator.CreateContainer(rect);
CanvasHelper.SetPosition(graphCanvas, container.Location.ToWpf());
graphCanvas.Background = FixedDocumentCreator.ConvertBrush(container.BackColor);
if (rect != null) {
Visit(rect);
graphCanvas.Children.Add(UIElement);
}
return graphCanvas;
}
public override void Visit(ExportText exportColumn){
var ft = FixedDocumentCreator.CreateFormattedText((ExportText)exportColumn);
@ -128,19 +133,25 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor @@ -128,19 +133,25 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
public override void Visit(ExportRectangle exportRectangle)
{
var pen = FixedDocumentCreator.CreateWpfPen(exportRectangle);
var visual = new DrawingVisual();
using (var dc = visual.RenderOpen()){
dc.DrawRectangle(FixedDocumentCreator.ConvertBrush(exportRectangle.BackColor),
pen,
new Rect(exportRectangle.Location.X,exportRectangle.Location.Y,
exportRectangle.Size.Width,exportRectangle.Size.Height));
var border = new Border();
border.BorderThickness = new Thickness(exportRectangle.Thickness);
border.BorderBrush = FixedDocumentCreator.ConvertBrush(exportRectangle.ForeColor);
border.Background = FixedDocumentCreator.ConvertBrush(exportRectangle.BackColor);
border.Width = exportRectangle.Size.Width;
border.Height = exportRectangle.Size.Height;
CanvasHelper.SetPosition(border, new Point(0,0));
var sp = new StackPanel();
sp.Orientation = Orientation.Horizontal;
foreach (var element in exportRectangle.ExportedItems) {
var acceptor = element as IAcceptor;
acceptor.Accept(this);
sp.Children.Add(UIElement);
}
var dragingElement = new DrawingElement(visual);
UIElement = dragingElement;
border.Child = sp;
UIElement = border;
}
public override void Visit(ExportCircle exportCircle)
{
var pen = FixedDocumentCreator.CreateWpfPen(exportCircle);

Loading…
Cancel
Save