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 @@
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
using System; using System;
using System.Collections.Generic;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using ICSharpCode.Reporting.Arrange;
using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Interfaces.Export;
namespace ICSharpCode.Reporting.PageBuilder.ExportColumns namespace ICSharpCode.Reporting.PageBuilder.ExportColumns
{ {
/// <summary> /// <summary>
/// Description of ExportRectangle. /// Description of ExportRectangle.
/// </summary> /// </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 int Thickness {get;set;}
public DashStyle DashStyle {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
public static Canvas CreateContainer(ExportContainer container) { public static Canvas CreateContainer(ExportContainer container) {
var canvas = CreateCanvas(container); var canvas = CreateCanvas(container);
var size = container.DesiredSize.ToWpf(); var size = container.DesiredSize.ToWpf();
CanvasHelper.SetPosition(canvas,new Point(container.Location.X,container.Location.Y));
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 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) public static FormattedText CreateFormattedText(ExportText exportText)

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

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

Loading…
Cancel
Save