Browse Source

Use FormattedText to measure Text.

reports
Peter Forstmeier 13 years ago
parent
commit
770eef87c6
  1. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj
  2. 28
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs
  3. 4
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/MeasurementStrategy.cs
  4. 94
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/ExtensionMethods.cs
  5. 71
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ExportRenderer/FixedDocumentCreator.cs
  6. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs
  7. 9
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/MeasurementService.cs
  8. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Export/IExportContainer.cs
  9. 20
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs
  10. 30
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs
  11. 8
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/IContainerConverter.cs
  12. 11
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs
  13. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportColumn.cs
  14. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs
  15. 86
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/MeasureArrange/ContainerArrangeStrategyFixture.cs
  16. 15
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/ContainerConverterFixture.cs

1
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj

@ -76,6 +76,7 @@ @@ -76,6 +76,7 @@
<Compile Include="Src\Arrange\ArrangeStrategy.cs" />
<Compile Include="Src\Arrange\MeasurementStrategy.cs" />
<Compile Include="Src\BaseClasses\AbstractColumn.cs" />
<Compile Include="Src\BaseClasses\ExtensionMethods.cs" />
<Compile Include="Src\BaseClasses\GroupColumn.cs" />
<Compile Include="Src\BaseClasses\PageInfo.cs" />
<Compile Include="Src\BaseClasses\SortColumn.cs" />

28
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs

@ -30,8 +30,32 @@ namespace ICSharpCode.Reporting.Arrange @@ -30,8 +30,32 @@ namespace ICSharpCode.Reporting.Arrange
{
}
public void Arrange(IExportColumn exportColumn){
if (exportColumn == null)
throw new ArgumentNullException("exportColumn");
var container = exportColumn as IExportContainer;
if ((container != null) && (container.ExportedItems.Count > 0)) {
var resizeable = from resize in container.ExportedItems
where ((resize.CanGrow))
select resize;
if (resizeable.Any()) {
//minimun Location
// var minLocation = (from p in container.ExportedItems orderby p.Location.Y select p).First();
var maxLocation = (from p in container.ExportedItems orderby p.Location.Y select p).Last();
// maximum Size
var maxBottom = (from p in container.ExportedItems orderby p.DisplayRectangle.Bottom select p).Last();
container.DesiredSize = new Size(container.Size.Width,maxLocation.Location.Y + maxBottom.DesiredSize.Height + 5);
public void Arrange(IExportColumn exportColumn)
} else {
container.DesiredSize = container.Size;
}
}
}
public void old_Arrange(IExportColumn exportColumn)
{
if (exportColumn == null)
throw new ArgumentNullException("exportColumn");
@ -54,6 +78,8 @@ namespace ICSharpCode.Reporting.Arrange @@ -54,6 +78,8 @@ namespace ICSharpCode.Reporting.Arrange
}
}
private Rectangle FindBiggestRectangle (IExportContainer container)
{
var rect = Rectangle.Empty;

4
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/MeasurementStrategy.cs

@ -35,13 +35,13 @@ namespace ICSharpCode.Reporting.Arrange @@ -35,13 +35,13 @@ namespace ICSharpCode.Reporting.Arrange
if (tbi != null) {
element.DesiredSize = MeasurementService.Measure(tbi,graphics);
}
Console.WriteLine("Measure -> {0} - {1}",element.Size,element.DesiredSize);
}
return exportColumn.DesiredSize;
}
}
internal class TextBasedMeasurementStrategy:IMeasurementStrategy
class TextBasedMeasurementStrategy:IMeasurementStrategy
{
public Size Measure(IExportColumn exportColumn, Graphics graphics)

94
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/ExtensionMethods.cs

@ -0,0 +1,94 @@ @@ -0,0 +1,94 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Media;
namespace ICSharpCode.Reporting.BaseClasses
{
/// <summary>
/// Description of ExtensionMethodes.
/// Copy from D:\git_Sharpdevelop_Reporting\src\AddIns\Misc\Reports\ICSharpCode.Reports.Core\Project\WPF\ExtensionMethodes.cs
/// </summary>
/// <see cref="D:\git_Sharpdevelop_Reporting\src\AddIns\Misc\Reports\ICSharpCode.Reports.Core\Project\WPF\ExtensionMethodes.cs"
internal static class ExtensionMethodes
{
#region Collections
public static void ForEach<T>(this IEnumerable<T> input, Action<T> action)
{
if (input == null)
throw new ArgumentNullException("input");
foreach (T element in input) {
action(element);
}
}
#endregion
#region system.drawing -> Wpf
public static Point ToWpf(this System.Drawing.Point p)
{
return new Point(p.X, p.Y);
}
public static Size ToWpf(this System.Drawing.Size s)
{
return new Size(s.Width, s.Height);
}
public static Rect ToWpf(this System.Drawing.Rectangle rect)
{
return new Rect(rect.Location.ToWpf(), rect.Size.ToWpf());
}
public static System.Windows.Media.Color ToWpf(this System.Drawing.Color c)
{
return System.Windows.Media.Color.FromArgb(c.A, c.R, c.G, c.B);
}
#endregion
#region DPI independence
public static Rect TransformToDevice(this Rect rect, Visual visual)
{
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformToDevice;
return Rect.Transform(rect, matrix);
}
public static Rect TransformFromDevice(this Rect rect, Visual visual)
{
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice;
return Rect.Transform(rect, matrix);
}
public static Size TransformToDevice(this Size size, Visual visual)
{
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformToDevice;
return new Size(size.Width * matrix.M11, size.Height * matrix.M22);
}
public static Size TransformFromDevice(this Size size, Visual visual)
{
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice;
return new Size(size.Width * matrix.M11, size.Height * matrix.M22);
}
public static Point TransformToDevice(this Point point, Visual visual)
{
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformToDevice;
return new Point(point.X * matrix.M11, point.Y * matrix.M22);
}
public static Point TransformFromDevice(this Point point, Visual visual)
{
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice;
return new Point(point.X * matrix.M11, point.Y * matrix.M22);
}
#endregion
}
}

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

@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
@ -19,6 +20,7 @@ using Brush = System.Windows.Media.Brush; @@ -19,6 +20,7 @@ using Brush = System.Windows.Media.Brush;
using FontFamily = System.Windows.Media.FontFamily;
using Pen = System.Windows.Media.Pen;
using Size = System.Windows.Size;
using ICSharpCode.Reporting.BaseClasses;
namespace ICSharpCode.Reporting.ExportRenderer
{
@ -37,9 +39,12 @@ namespace ICSharpCode.Reporting.ExportRenderer @@ -37,9 +39,12 @@ namespace ICSharpCode.Reporting.ExportRenderer
public UIElement CreateFixedPage(ExportPage exportPage) {
var fixedPage = new FixedPage();
fixedPage.Width = exportPage.Size.Width;
fixedPage.Height = exportPage.Size.Height;
fixedPage.Background = ConvertBrush(System.Drawing.Color.Blue);
fixedPage.Width = exportPage.Size.ToWpf().Width;
fixedPage.Height = exportPage.Size.ToWpf().Height;
// fixedPage.Background = ConvertBrush(System.Drawing.Color.Blue);
fixedPage.Background = new SolidColorBrush(System.Drawing.Color.Blue.ToWpf());
return fixedPage;
}
@ -47,15 +52,13 @@ namespace ICSharpCode.Reporting.ExportRenderer @@ -47,15 +52,13 @@ namespace ICSharpCode.Reporting.ExportRenderer
public UIElement CreateContainer(ExportContainer container)
{
var canvas = CreateCanvas(container);
var size = new Size(container.DesiredSize.Width,container.DesiredSize.Height);
var size = container.DesiredSize.ToWpf();
canvas.Measure(size);
canvas.Arrange(new Rect(new Point(),size ));
canvas.UpdateLayout();
return canvas;
}
@ -64,28 +67,30 @@ namespace ICSharpCode.Reporting.ExportRenderer @@ -64,28 +67,30 @@ namespace ICSharpCode.Reporting.ExportRenderer
public TextBlock CreateTextBlock(ExportText exportText)
{
var textBlock = new TextBlock();
// textBlock.Text = exportText.Text;
textBlock.Width = exportText.DesiredSize.Width;
textBlock.Height = exportText.DesiredSize.Height;
textBlock.Foreground = ConvertBrush(exportText.ForeColor);
// textBlock.Background = ConvertBrush(exportText.BackColor);
textBlock.Background = ConvertBrush(System.Drawing.Color.LightGray);
SetFont(textBlock,exportText);
textBlock.Background = ConvertBrush(exportText.BackColor);
textBlock.TextWrapping = TextWrapping.WrapWithOverflow;
// textBlock.TextWrapping = TextWrapping.NoWrap;
string [] inlines = exportText.Text.Split(System.Environment.NewLine.ToCharArray());
//string [] inlines = "jmb,.n,knn-.n.-n.n-.n.n.-";
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());
textBlock.Inlines.Add(new LineBreak());
}
}
var li = textBlock.Inlines.LastInline;
textBlock.Inlines.Remove(li);
// SetDimension(textBlock,exportText.StyleDecorator);
var s = MeasureTextInWpf(exportText);
textBlock.Width = s.Width;
textBlock.Height = s.Height;
// textBlock.Background = ConvertBrush(exportText.StyleDecorator.BackColor);
// SetContendAlignment(textBlock,exportText.StyleDecorator);
@ -93,6 +98,32 @@ namespace ICSharpCode.Reporting.ExportRenderer @@ -93,6 +98,32 @@ namespace ICSharpCode.Reporting.ExportRenderer
}
Size MeasureTextInWpf(ExportText exportText)
{
FormattedText ft = new FormattedText(exportText.Text,
CultureInfo.CurrentCulture,
System.Windows.FlowDirection.LeftToRight,
new Typeface(exportText.Font.FontFamily.Name),
exportText.Font.Size,
// System.Windows.Media.Brushes.Black,
new SolidColorBrush(exportText.ForeColor.ToWpf()),
null,
TextFormattingMode.Display);
ft.MaxTextWidth = exportText.Size.Width * 96.0 / 72.0;
ft.MaxTextHeight = Double.MaxValue ;
ft.SetFontSize(exportText.Font.Size * 96.0 / 72.0);
var ss = new Size {
Width = ft.WidthIncludingTrailingWhitespace,
Height = ft.Height};
return ss;
}
Canvas CreateCanvas(ExportContainer container)
{
var canvas = new Canvas();
@ -126,9 +157,11 @@ namespace ICSharpCode.Reporting.ExportRenderer @@ -126,9 +157,11 @@ namespace ICSharpCode.Reporting.ExportRenderer
void SetFont(TextBlock textBlock,IExportText exportText)
{
textBlock.FontFamily = new FontFamily(exportText.Font.FontFamily.Name);
textBlock.FontSize = exportText.Font.Size * 96/72;
//http://www.codeproject.com/Articles/441009/Drawing-Formatted-Text-in-a-Windows-Forms-Applicat
textBlock.FontSize = exportText.Font.Size * 96/72;
if (exportText.Font.Bold) {
textBlock.FontWeight = FontWeights.Bold;
}

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

@ -12,7 +12,7 @@ using System.Windows; @@ -12,7 +12,7 @@ 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;

9
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/MeasurementService.cs

@ -27,11 +27,16 @@ namespace ICSharpCode.Reporting.Globals @@ -27,11 +27,16 @@ namespace ICSharpCode.Reporting.Globals
if (!item.CanGrow) {
return item.Size;
}
var sf = new StringFormat();
sf.FormatFlags = StringFormatFlags.MeasureTrailingSpaces;
if (!String.IsNullOrEmpty(item.Text)) {
SizeF size = graphics.MeasureString(item.Text.TrimEnd(),
item.Font,
item.Size.Width);
var i = (int)size.Height/item.Font.Height;
item.Size.Width,sf);
// var i = (int)size.Height/item.Font.Height;
// var x = i * item.Font.Height;
if (size.Height < item.Size.Height) {
return item.Size;
}

1
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Export/IExportContainer.cs

@ -8,7 +8,6 @@ @@ -8,7 +8,6 @@
*/
using System;
using System.Collections.Generic;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
namespace ICSharpCode.Reporting.Interfaces.Export
{

20
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs

@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Drawing;
using System.Linq;
@ -58,7 +59,7 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -58,7 +59,7 @@ namespace ICSharpCode.Reporting.PageBuilder
protected void BuildPageHeader()
{
var pageHeader = CreateSection(ReportModel.PageHeader,CurrentLocation);
DetailStart = new Point(ReportModel.ReportSettings.LeftMargin,pageHeader.Location.Y + pageHeader.Size.Height +1);
DetailStart = new Point(ReportModel.ReportSettings.LeftMargin,pageHeader.Location.Y + pageHeader.DesiredSize.Height +1);
AddSectionToPage(pageHeader);
}
@ -101,16 +102,11 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -101,16 +102,11 @@ namespace ICSharpCode.Reporting.PageBuilder
}
protected bool PageFull(System.Collections.Generic.List<IExportColumn> columns)
protected bool PageFull(List<IExportColumn> columns)
{
var rectToPrint = new Rectangle(columns[0].Location,columns[0].Size);
var rr = new Rectangle(new Point(columns[0].Location.X + DetailsRectangle.Location.X,columns[0].Location.Y + DetailsRectangle.Location.Y),
columns[0].Size);
Console.WriteLine("------{0} - {1} - {2}",rectToPrint.ToString(),rr.ToString(),DetailEnds.Y);
// if (rectToPrint.Bottom > DetailEnds.Y) {
// Console.WriteLine("----------PageBreak---");
// return true;
// }
if (!DetailsRectangle.Contains(rr)) {
return true;
}
@ -140,9 +136,13 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -140,9 +136,13 @@ namespace ICSharpCode.Reporting.PageBuilder
protected IExportContainer CreateSection(IReportContainer container,Point location)
{
var containerConverter = new ContainerConverter(Graphics, location);
var convertedContainer = containerConverter.Convert(container);
var convertedContainer = containerConverter.ConvertToExportContainer(container);
var list = containerConverter.CreateConvertedList(container,convertedContainer);
var list = containerConverter.CreateConvertedList(container.Items);
convertedContainer.ExportedItems.AddRange(list);
containerConverter.SetParent(convertedContainer,list);
convertedContainer.ExportedItems.AddRange(list);
convertedContainer.DesiredSize = MeasureElement(convertedContainer);
@ -151,6 +151,8 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -151,6 +151,8 @@ namespace ICSharpCode.Reporting.PageBuilder
}
protected void AddSectionToPage(IExportContainer header)
{
header.Parent = CurrentPage;

30
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs

@ -32,7 +32,7 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter @@ -32,7 +32,7 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter
}
public virtual IExportContainer Convert(IReportContainer reportContainer)
public virtual IExportContainer ConvertToExportContainer(IReportContainer reportContainer)
{
var exportContainer = (ExportContainer)reportContainer.CreateExportColumn();
exportContainer.Location = CurrentLocation;
@ -40,33 +40,33 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter @@ -40,33 +40,33 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter
}
public List<IExportColumn> CreateConvertedList(IReportContainer reportContainer,
public List<IExportColumn> CreateConvertedList(List<IPrintableObject> items,
Point position){
var itemsList = new List<IExportColumn>();
foreach (var item in reportContainer.Items) {
var exportColumn = ExportColumnFactory.CreateItem(item);
// exportColumn.Parent = exportContainer;
exportColumn.Location = new Point(item.Location.X,item.Location.Y + position.Y);
itemsList.Add(exportColumn);
var list = CreateConvertedList(items);
foreach (var item in list) {
item.Location = new Point(item.Location.X,item.Location.Y + position.Y);
}
return itemsList;
return list;
}
public List<IExportColumn> CreateConvertedList(IReportContainer reportContainer
,IExportContainer exportContainer){
Console.WriteLine("CreateConvertedList {0}",reportContainer.Name);
public List<IExportColumn> CreateConvertedList(List<IPrintableObject> items){
var itemsList = new List<IExportColumn>();
foreach (var element in reportContainer.Items) {
foreach (var element in items) {
var exportColumn = ExportColumnFactory.CreateItem(element);
exportColumn.Parent = exportContainer;
itemsList.Add(exportColumn);
}
return itemsList;
}
public void SetParent(IExportContainer parent, List<IExportColumn> convertedItems)
{
foreach (var item in convertedItems) {
item.Parent = parent;
}
}
internal IReportContainer Container { get; private set; }
protected Point CurrentLocation { get; set; }

8
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/IContainerConverter.cs

@ -17,9 +17,9 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter @@ -17,9 +17,9 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter
{
internal interface IContainerConverter
{
IExportContainer Convert(IReportContainer reportContainer);
List<IExportColumn> CreateConvertedList(IReportContainer reportContainer,IExportContainer exportContainer);
List<IExportColumn> CreateConvertedList(IReportContainer reportContainer,Point position);
IExportContainer ConvertToExportContainer(IReportContainer reportContainer);
List<IExportColumn> CreateConvertedList(List<IPrintableObject> items);
List<IExportColumn> CreateConvertedList(List<IPrintableObject> items,Point position);
void SetParent(IExportContainer parent, List<IExportColumn> convertedItems);
}
}

11
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs

@ -65,8 +65,8 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -65,8 +65,8 @@ namespace ICSharpCode.Reporting.PageBuilder
detail.Parent = CurrentPage;
do {
collectionSource.Fill(CurrentSection.Items);
var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection,position);
SetParentToSection(detail,convertedItems);
var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection.Items,position);
converter.SetParent(detail,convertedItems);
if (PageFull(convertedItems)) {
detail.ExportedItems.AddRange(convertedItems);
CurrentPage.ExportedItems.Insert(2,detail);
@ -98,12 +98,7 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -98,12 +98,7 @@ namespace ICSharpCode.Reporting.PageBuilder
}
void SetParentToSection(IExportContainer detail, List<IExportColumn> convertedItems)
{
foreach (var item in convertedItems) {
item.Parent = detail;
}
}
/*
void row_BuildDetail()

3
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportColumn.cs

@ -45,7 +45,8 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns @@ -45,7 +45,8 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns
public Rectangle DisplayRectangle {
get {
return new Rectangle(Location,Size);
// return new Rectangle(Location,Size);
return new Rectangle(Location,DesiredSize);
}
}

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

@ -44,7 +44,8 @@ namespace ICSharpCode.Reporting.WpfReportViewer @@ -44,7 +44,8 @@ namespace ICSharpCode.Reporting.WpfReportViewer
{
var document = new FixedDocument();
var s = document.DocumentPaginator.PageSize;
document.DocumentPaginator.PageSize = new System.Windows.Size(reportSettings.PageSize.Width, reportSettings.PageSize.Height);
document.DocumentPaginator.PageSize = new System.Windows.Size(reportSettings.PageSize.Width,
reportSettings.PageSize.Height);
return document;
}

86
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/MeasureArrange/ContainerArrangeStrategyFixture.cs

@ -8,6 +8,8 @@ @@ -8,6 +8,8 @@
*/
using System;
using System.Drawing;
using System.Linq;
using ICSharpCode.Reporting.Arrange;
using ICSharpCode.Reporting.Globals;
using ICSharpCode.Reporting.Interfaces.Export;
@ -31,41 +33,34 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange @@ -31,41 +33,34 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange
Assert.That(param.Size, Is.EqualTo(size));
}
[Test]
public void ItemAtTopOfContainer() {
var container = CreateContainer();
container.ExportedItems[0].Location = container.Location;
container.ExportedItems[0].Location = Point.Empty;
Measure(container);
strategy.Arrange(container);
var containerRect = new Rectangle(container.Location,container.DesiredSize);
var itemRect = new Rectangle(container.ExportedItems[0].Location,container.ExportedItems[0].Size);
Assert.That(containerRect.Contains(itemRect));
var arrangedRect = CreateItemRectangle(container);
Assert.That(containerRect.Contains(arrangedRect));
}
[Test]
public void ContainerResizeIfItemCanGrow () {
public void ContainerNotResizeIfCanGrowEqualFalse () {
var container = CreateContainer();
// MakeCangGrow(container);
Measure(container);
strategy.Arrange(container);
strategy.Arrange(container);
var containerRect = new Rectangle(container.Location,container.DesiredSize);
var child = container.ExportedItems[0];
var childLocation = new Point(containerRect.Left + child.Location.X,containerRect.Top + child.Location.Y);
var childRect = new Rectangle(childLocation,child.DesiredSize);
Assert.That(containerRect.Contains(childRect));
Assert.That(container.Size,Is.EqualTo(container.DesiredSize));
}
[Test]
public void ContainerIs_5_Below_LargestItem() {
public void ContainerResizeIfItemCanGrow () {
var container = CreateContainer();
MakeCangGrow(container);
@ -74,10 +69,8 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange @@ -74,10 +69,8 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange
var containerRect = new Rectangle(container.Location,container.DesiredSize);
var child = container.ExportedItems[0];
var childLocation = new Point(containerRect.Left + child.Location.X,containerRect.Top + child.Location.Y);
var childRect = new Rectangle(childLocation,child.DesiredSize);
Assert.That(containerRect.Bottom,Is.EqualTo(childRect.Bottom + 5));
var arrangedRect = CreateItemRectangle(container);
Assert.That(containerRect.Contains(arrangedRect));
}
@ -88,11 +81,46 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange @@ -88,11 +81,46 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange
Measure(container);
strategy.Arrange(container);
var containerRect = new Rectangle(container.Location,container.DesiredSize);
var arrangeRect = new Rectangle(new Point(container.Location.X + strategy.BiggestRectangle.Left,
strategy.BiggestRectangle.Top),
strategy.BiggestRectangle.Size);
var item = container.ExportedItems[0];
var arrangedRect = CreateItemRectangle(container);
Assert.That(containerRect.Bottom,Is.EqualTo(arrangedRect.Bottom + 5));
}
[Test]
public void ContainerContainsTwoItems_OneCanGrow () {
var container = CreateContainer();
var item1 = new ExportText(){
CanGrow = true,
Name = "Item1",
Location = new Point(80,20),
Size = new Size (60,70),
Parent = container
};
container.ExportedItems.Add(item1);
Assert.That(containerRect.Bottom,Is.EqualTo(arrangeRect.Bottom + 5));
Measure(container);
strategy.Arrange(container);
foreach (var element in container.ExportedItems) {
var arrangedRect = new Rectangle(container.Location.X + element.Location.X,container.Location.Y + element.Location.Y,
element.Size.Width,element.Size.Height);
Assert.That(container.DisplayRectangle.IntersectsWith(arrangedRect));
Assert.That(container.DisplayRectangle.Contains(arrangedRect));
}
}
Rectangle CreateItemRectangle(IExportContainer container)
{
var containerRect = new Rectangle(container.Location,container.DesiredSize);
var child = container.ExportedItems[0];
var childLocation = new Point(containerRect.Left + child.Location.X, containerRect.Top + child.Location.Y);
var childRect = new Rectangle(childLocation, child.DesiredSize);
return childRect;
}
@ -104,20 +132,22 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange @@ -104,20 +132,22 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange
}
void Measure(IExportColumn container)
{
var mes = container.MeasurementStrategy();
mes.Measure(container, graphics);
container.DesiredSize = mes.Measure(container, graphics);
}
IExportContainer CreateContainer () {
var container = new ExportContainer(){
Size = new Size (720,60),
Location = new Point(50,50),
Name ="Section"
};
var item1 = new ExportText(){
Name = "Item1",
Location = new Point(10,10),
@ -128,7 +158,7 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange @@ -128,7 +158,7 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange
container.ExportedItems.Add(item1);
return container;
}
[TestFixtureSetUp]
public void Init()
{

15
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/ContainerConverterFixture.cs

@ -25,7 +25,7 @@ namespace ICSharpCode.Reporting.Test.PageBuilder @@ -25,7 +25,7 @@ namespace ICSharpCode.Reporting.Test.PageBuilder
[Test]
public void ConverterReturnExportContainer() {
var converter = new ContainerConverter(graphics,new Point(30,30));
var result = converter.Convert(container);
var result = converter.ConvertToExportContainer(container);
Assert.That(result,Is.InstanceOf(typeof(IExportContainer)));
}
@ -34,8 +34,8 @@ namespace ICSharpCode.Reporting.Test.PageBuilder @@ -34,8 +34,8 @@ namespace ICSharpCode.Reporting.Test.PageBuilder
public void ConverterReturnExportContainerwithTwoItems()
{
var converter = new ContainerConverter(graphics,new Point(30,30));
var result = converter.Convert(container);
var list = converter.CreateConvertedList(container,new Point(30,30));
var result = converter.ConvertToExportContainer(container);
var list = converter.CreateConvertedList(container.Items,new Point(30,30));
result.ExportedItems.AddRange(list);
Assert.That(result.ExportedItems.Count,Is.EqualTo(2));
}
@ -45,15 +45,18 @@ namespace ICSharpCode.Reporting.Test.PageBuilder @@ -45,15 +45,18 @@ namespace ICSharpCode.Reporting.Test.PageBuilder
public void LocationIsAdjusted() {
var location = new Point(30,30);
var converter = new ContainerConverter(graphics,location);
var result = converter.Convert(container);
var result = converter.ConvertToExportContainer(container);
Assert.That(result.Location,Is.EqualTo(location));
}
[Test]
public void ParentInChildsIsSet () {
var converter = new ContainerConverter(graphics,container.Location);
var result = converter.Convert(container);
foreach (var element in result.ExportedItems) {
var convertedContainer = converter.ConvertToExportContainer(container);
var convertedList = converter.CreateConvertedList(container.Items);
converter.SetParent(convertedContainer,convertedList);
convertedContainer.ExportedItems.AddRange(convertedList);
foreach (var element in convertedContainer.ExportedItems) {
Assert.That(element.Parent,Is.Not.Null);
}
}

Loading…
Cancel
Save