Browse Source

Patch from eric342 partial fixing:

http://community.sharpdevelop.net/forums/t/13066.aspx
pull/15/head^2
peterforstmeier 14 years ago
parent
commit
5a813d01ba
  1. 6
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs
  2. 103
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs
  3. 15
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs

6
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs

@ -84,8 +84,8 @@ namespace ICSharpCode.Reports.Core { @@ -84,8 +84,8 @@ namespace ICSharpCode.Reports.Core {
IndexList childList = null;
foreach (BaseComparer element in list)
{
string v = element.ObjectArray[0].ToString();
if (compVal != v) {
string groupValue = element.ObjectArray[0].ToString();
if (compVal != groupValue) {
childList = new IndexList();
GroupComparer gc = CreateGroupHeader(element);
gc.IndexList = childList;
@ -93,7 +93,7 @@ namespace ICSharpCode.Reports.Core { @@ -93,7 +93,7 @@ namespace ICSharpCode.Reports.Core {
} else {
CreateGroupedChildren(childList,element);
}
compVal = v;
compVal = groupValue;
}
//ShowIndexList(IndexList);
}

103
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs

@ -76,12 +76,12 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -76,12 +76,12 @@ namespace ICSharpCode.Reports.Core.Exporter
#region Converters
protected ExporterCollection ConvertSection (BaseSection section,int dataRow)
{
FireSectionRenderEvent (section ,dataRow);
PrintHelper.AdjustParent(section,section.Items);
PrintHelper.AdjustSectionLocation(section);
var convertedSection = new ExporterCollection();
Offset = new Point(section.Location.X,section.SectionOffset);
@ -95,8 +95,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -95,8 +95,7 @@ namespace ICSharpCode.Reports.Core.Exporter
BaseReportItem oldItem = section.Items[0];
int gap = 0;
int gap = oldItem.Location.Y;
foreach (BaseReportItem item in section.Items)
{
@ -107,20 +106,95 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -107,20 +106,95 @@ namespace ICSharpCode.Reports.Core.Exporter
{
EvaluationHelper.EvaluateReportItems(evaluator,simpleContainer.Items);
//
Offset = new Point(Offset.X,Offset.Y + item.Size.Height + gap);
var layouter = (ILayouter)ServiceContainer.GetService(typeof(ILayouter));
LayoutHelper.SetLayoutForRow(Graphics,layouter, simpleContainer);
/*
ExporterCollection xx = new ExporterCollection();
var pp = BaseConverter.ConvertContainer(xx,simpleContainer,Offset.X,Offset);
*/
ExportContainer exportContainer = ExportHelper.ConvertToContainer(simpleContainer,Offset);
Offset = BaseConverter.ConvertContainer(convertedSection,simpleContainer,Offset.X,Offset);
Offset = new Point(Offset.X,Offset.Y + gap);
}
else
{
Offset = new Point(Offset.X,Offset.Y + gap);
var converteditem = ExportHelper.ConvertLineItem(item,Offset);
convertedSection.Add(converteditem);
}
oldItem = item;
}
}
return convertedSection;
}
/*
// protected ExporterCollection ConvertSection (BaseSection section,int dataRow)
private ExporterCollection bbConvertSection (BaseSection section,int dataRow)
{
FireSectionRenderEvent (section ,dataRow);
PrintHelper.AdjustParent(section,section.Items);
var convertedSection = new ExporterCollection();
Offset = new Point(section.Location.X,section.SectionOffset);
if (section.Items.Count > 0) {
section.Items.SortByLocation();
IExpressionEvaluatorFacade evaluator = EvaluationHelper.CreateEvaluator(this.SinglePage,this.SinglePage.IDataNavigator);
var layouter = (ILayouter)ServiceContainer.GetService(typeof(ILayouter));
Console.WriteLine("start sec size {0}",section.Size);
Rectangle desiredRectangle = LayoutHelper.CalculateSectionLayout(this.Graphics,section);
LayoutHelper.FixSectionLayout(desiredRectangle,section);
Console.WriteLine("after sectionlayout sec size {0}",section.Size);
Console.WriteLine(section.Name);
BaseReportItem oi = section.Items[0];
var rr = oi.Location.Y;
foreach (var element in section.Items)
{
if (oi != element) {
rr = CalculateGap(oi,element);
}
Console.WriteLine(rr);
oi = element;
}
BaseReportItem oldItem = section.Items[0];
int gap = oldItem.Location.Y;
foreach (BaseReportItem item in section.Items)
{
ISimpleContainer simpleContainer = item as ISimpleContainer;
gap = CalculateGap (oldItem,item);
if (simpleContainer != null)
{
EvaluationHelper.EvaluateReportItems(evaluator,simpleContainer.Items);
Offset = new Point(Offset.X,Offset.Y + item.Size.Height + gap);
// var layouter = (ILayouter)ServiceContainer.GetService(typeof(ILayouter));
LayoutHelper.SetLayoutForRow(Graphics,layouter, simpleContainer);
// Console.WriteLine("offset start {0}",Offset);
http://stackoverflow.com/questions/4270541/how-can-i-determine-if-one-rectangle-is-completely-contained-within-another
Rectangle r2 = new Rectangle(0,0,section.Size.Width,section.Size.Height);
// Rectangle r2 = new Rectangle(section.Location,section.Size);
Rectangle ro = new Rectangle(simpleContainer.Location,simpleContainer.Size);
Console.WriteLine (r2.Contains(ro));
Rectangle r3 = Rectangle.Union(r2,ro);
Rectangle r4 = Rectangle.Union(ro,r2);
ro.Intersect(r2);
if (!r2.Contains(ro)) {
/*section.Size = new Size (section.Size.Width,r3.Size.Height);
}
ExportContainer exportContainer = ExportHelper.ConvertToContainer(simpleContainer,Offset);
// Offset = new Point(Offset.X,Offset.Y + item.Size.Height + gap);
ExporterCollection exporterCollection = ExportHelper.ConvertPlainCollection(simpleContainer.Items,exportContainer.StyleDecorator.Location);
exportContainer.Items.AddRange(exporterCollection);
convertedSection.Add(exportContainer);
}
@ -133,9 +207,10 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -133,9 +207,10 @@ namespace ICSharpCode.Reports.Core.Exporter
oldItem = item;
}
}
Console.WriteLine("bbbb sec size {0} new size {1}",section.Size, new Size(section.Size.Width,Offset.Y));
return convertedSection;
}
*/
int CalculateGap(BaseReportItem oldItem, BaseReportItem item)
{
@ -228,7 +303,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -228,7 +303,7 @@ namespace ICSharpCode.Reports.Core.Exporter
}
ExportText et = be as ExportText;
if (et != null) {
if ((et != null) && (!String.IsNullOrEmpty(et.Text))) {
if (et.Text.StartsWith("=",StringComparison.InvariantCulture)) {
et.Text = evaluatorFassade.Evaluate(et.Text);
}

15
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs

@ -65,18 +65,11 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -65,18 +65,11 @@ namespace ICSharpCode.Reports.Core.Exporter
protected override void BuildReportHeader ()
{
if ((base.Pages.Count == 0) && (base.ReportModel.ReportHeader.Items.Count > 0)) {
var s = base.ReportModel.ReportHeader;
Console.WriteLine("name <{0}>",s.Name);
Console.WriteLine("start section size {0} sectionoffset {1} offset {2}",s.Size,s.SectionOffset,base.Offset);
base.ReportModel.ReportHeader.SectionOffset = base.SinglePage.SectionBounds.ReportHeaderRectangle.Top;
ExporterCollection convertedList = base.ConvertSection (base.ReportModel.ReportHeader,this.dataNavigator.CurrentRow);
base.SectionBounds.MeasurePageHeader(base.ReportModel.ReportHeader);
base.SinglePage.Items.AddRange(convertedList);
// Console.WriteLine("end section size {0} sectionoffset {1} offset {2}",s.Size,s.SectionOffset,base.Offset);
// Console.WriteLine();
}
}
@ -91,17 +84,13 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -91,17 +84,13 @@ namespace ICSharpCode.Reports.Core.Exporter
base.SectionBounds.MeasurePageHeader(base.ReportModel.PageHeader);
// Console.WriteLine("section after adjustparent {0} new size {1}",base.ReportModel.PageHeader.SectionOffset,ss);
ExporterCollection convertedList = base.ConvertSection (base.ReportModel.PageHeader,this.dataNavigator.CurrentRow);
Console.WriteLine("end section size {0} sectionoffset {1} offset {2}",s.Size,s.SectionOffset,base.Offset);
base.SinglePage.Items.AddRange(convertedList);
base.SectionBounds.MeasurePageHeader(base.ReportModel.PageHeader);
base.SinglePage.Items.AddRange(convertedList);
Console.WriteLine("aft-section size {0} sectionoffset {1} offset {2}",s.Size,s.SectionOffset,base.Offset);
Console.WriteLine("Pageheader {0} - Detailstart {0}",SectionBounds.PageHeaderRectangle,SectionBounds.DetailStart);
Console.WriteLine();
}

Loading…
Cancel
Save