Browse Source

Refactor DataRenderer to show groupings

pull/2/head
peterforstmeier 15 years ago
parent
commit
1deff73d2b
  1. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs
  2. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj
  3. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataManager.cs
  4. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs
  5. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs
  6. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/ReportingService/FieldReference.cs
  7. 20
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs
  8. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractDataRenderer.cs
  9. 19
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs
  10. 230
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderTable.cs
  11. 38
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RendererFactory.cs

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs

@ -337,7 +337,6 @@ namespace ICSharpCode.Reports.Addin @@ -337,7 +337,6 @@ namespace ICSharpCode.Reports.Addin
}
public void BuildTree ()
{
this.BeginUpdate();
@ -345,10 +344,12 @@ namespace ICSharpCode.Reports.Addin @@ -345,10 +344,12 @@ namespace ICSharpCode.Reports.Addin
SetSortColumns();
SetGroupColumns();
SetParameters();
// SetFunctions();
this.ExpandAll();
this.EndUpdate();
}
#endregion
#region Build Basic Tree

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj

@ -272,7 +272,9 @@ @@ -272,7 +272,9 @@
<Compile Include="Project\Printing\Graphics\RectangleShape.cs" />
<Compile Include="Project\Printing\AbstractRenderer.cs" />
<Compile Include="Project\Printing\RenderDataReport.cs" />
<Compile Include="Project\Printing\RendererFactory.cs" />
<Compile Include="Project\Printing\RenderFormSheetReport.cs" />
<Compile Include="Project\Printing\RenderTable.cs" />
<Compile Include="Project\Printing\ReportDocument.cs">
<SubType>Component</SubType>
</Compile>

1
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataManager.cs

@ -64,7 +64,6 @@ namespace ICSharpCode.Reports.Core { @@ -64,7 +64,6 @@ namespace ICSharpCode.Reports.Core {
}
}
#endregion

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs

@ -157,10 +157,11 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -157,10 +157,11 @@ namespace ICSharpCode.Reports.Core.Exporter
}
public ExporterPage SinglePage {
public ISinglePage SinglePage {
get { return singlePage; }
}
public SectionBounds SectionBounds {
get { return sectionBounds; }
}

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs

@ -126,7 +126,7 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.AggregateFunctions @@ -126,7 +126,7 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.AggregateFunctions
}
} else {
string str = String.Format ("<{0}> not found in AggregateFunction",data.ToString());
throw new FieldNotFoundException(str);
// throw new FieldNotFoundException(str);
}
}
return list;

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/ReportingService/FieldReference.cs

@ -40,8 +40,7 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.ReportingService @@ -40,8 +40,7 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.ReportingService
if (item != null) {
retval = item.Value.ToString();
} else {
retval= String.Format(System.Globalization.CultureInfo.InvariantCulture,
"!! Can't find <{0}> !! ",variable.VariableName);
retval = GlobalValues.UnkownFunctionMessage(variable.VariableName);
}
return retval;
}

20
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs

@ -6,22 +6,34 @@ using System.Drawing; @@ -6,22 +6,34 @@ using System.Drawing;
using ICSharpCode.Reports.Core.BaseClasses;
using ICSharpCode.Reports.Core.Events;
using ICSharpCode.Reports.Core.Exporter;
using ICSharpCode.Reports.Expressions.ReportingLanguage;
namespace ICSharpCode.Reports.Core.Interfaces
{
/// <summary>
/// Description of IItemConverter.
/// </summary>
public interface IBaseConverter
{
ExporterCollection Convert (BaseReportItem parent,BaseReportItem item);
///
public interface IRenderer
{
event EventHandler <NewPageEventArgs> PageFull;
event EventHandler<SectionRenderEventArgs> SectionRendering;
SectionBounds SectionBounds {get;}
IDataNavigator DataNavigator {get;}
Rectangle ParentRectangle {get;}
ExporterPage SinglePage {get;}
ISinglePage SinglePage {get;}
ILayouter Layouter {get;}
Graphics Graphics {get;set;}
}
public interface IBaseRenderer
{
void Render(ISimpleContainer container,ReportPageEventArgs rpea,IExpressionEvaluatorFacade evaluator);
}
public interface IBaseConverter:IRenderer
{
ExporterCollection Convert (BaseReportItem parent,BaseReportItem item);
}
}

4
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractDataRenderer.cs

@ -86,9 +86,7 @@ namespace ICSharpCode.Reports.Core @@ -86,9 +86,7 @@ namespace ICSharpCode.Reports.Core
Rectangle r = StandardPrinter.RenderContainer(row,Evaluator,currentPosition,rpea);
currentPosition =PrintHelper.ConvertRectangleToCurentPosition (r);
// currentPosition = new Point(parent.Location.X + row.Location.X,currentPosition.Y);
currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r);
tableContainer.Location = saveLocation;
Console.WriteLine("----");

19
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs

@ -155,12 +155,19 @@ namespace ICSharpCode.Reports.Core { @@ -155,12 +155,19 @@ namespace ICSharpCode.Reports.Core {
rpea.PrintPageEventArgs.HasMorePages = false;
return;
}
ITableContainer tableContainer = base.CurrentSection.Items[0] as ITableContainer;
IBaseRenderer r = PrintRendererFactory.CreateRenderer(base.CurrentSection.Items[0],nav,base.SinglePage,base.Layout,CurrentSection);
if ( r != null) {
// r.Render(tableContainer,rpea,Evaluator);
}
// branch to render table's etc
if (tableContainer != null)
{
tableContainer.DataNavigator = nav;
tableContainer.Parent = base.CurrentSection;
if (rpea.SinglePage.PageNumber == 1) {
@ -175,7 +182,8 @@ namespace ICSharpCode.Reports.Core { @@ -175,7 +182,8 @@ namespace ICSharpCode.Reports.Core {
this.ReportDocument.DetailsDone = true;
}
else {
else
{
// first element
if (base.SinglePage.PageNumber ==1) {
@ -212,13 +220,6 @@ namespace ICSharpCode.Reports.Core { @@ -212,13 +220,6 @@ namespace ICSharpCode.Reports.Core {
}
}
// if (this.dataNavigator.CurrentRow % 2 == 0) {
// PrintHelper.DebugRectangle(rpea.PrintPageEventArgs.Graphics,r);
// }
base.CurrentSection.SectionOffset = currentPosition.Y;
rpea.LocationAfterDraw = new Point (rpea.LocationAfterDraw.X,

230
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderTable.cs

@ -0,0 +1,230 @@ @@ -0,0 +1,230 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 10.10.2010
* Time: 17:37
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Drawing;
using ICSharpCode.Reports.Core.BaseClasses.Printing;
using ICSharpCode.Reports.Core.Interfaces;
using ICSharpCode.Reports.Expressions.ReportingLanguage;
namespace ICSharpCode.Reports.Core
{
/// <summary>
/// Description of RenderTable.
/// </summary>
public class RenderTable:IBaseRenderer
{
IDataNavigator dataNavigator;
Rectangle parentRectangle;
ISinglePage singlePage;
ILayouter layouter;
ReportPageEventArgs reportPageEventArgs;
BaseSection currentSection;
public RenderTable(IDataNavigator datanavigator,Rectangle parentRectangle,ISinglePage singlePage,ILayouter layouter,BaseSection section)
{
this.dataNavigator = datanavigator;
this.parentRectangle = parentRectangle;
this.singlePage = singlePage;
this.layouter = layouter;
this.currentSection = section;
}
public event EventHandler<ICSharpCode.Reports.Core.Events.NewPageEventArgs> PageFull;
public event EventHandler<SectionRenderEventArgs> SectionRendering;
public void Render (ISimpleContainer table,ReportPageEventArgs rpea,IExpressionEvaluatorFacade evaluator)
{
if (this.dataNavigator.CurrentRow < 0 ) {
this.dataNavigator.MoveNext();
}
this.reportPageEventArgs = rpea;
Point saveLocation = table.Location;
Rectangle pageBreakRect = Rectangle.Empty;
Point currentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.currentSection,table).Location.X,
this.currentSection.Location.Y);
table.Items.SortByLocation();
Size rs = Size.Empty;
ISimpleContainer headerRow = null;
var simpleContainer = table.Items[0] as ISimpleContainer;
// foreach (BaseRowItem row in table.Items)
// {
rs = simpleContainer.Size;
PrintHelper.AdjustParent(table as BaseReportItem,table.Items);
// if (PrintHelper.IsTextOnlyRow(simpleContainer) )
// {
PrintHelper.SetLayoutForRow(ReportPageEventArgs.PrintPageEventArgs.Graphics,Layouter,simpleContainer);
var r = StandardPrinter.RenderContainer(simpleContainer,evaluator,currentPosition,ReportPageEventArgs);
currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r);
table.Location = saveLocation;
// }
// else {
//---------------
simpleContainer = table.Items[1] as ISimpleContainer;
int adjust = simpleContainer.Location.Y - saveLocation.Y;
simpleContainer.Location = new Point(simpleContainer.Location.X,simpleContainer.Location.Y - adjust - 3 * GlobalValues.GapBetweenContainer);
rs = simpleContainer.Size;
do {
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)table,currentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,this.SectionBounds)) {
Console.WriteLine("PageBreak - PageFull");
table.Location = saveLocation;
AbstractRenderer.PageBreak(ReportPageEventArgs);
return;
}
this.dataNavigator.Fill(simpleContainer.Items);
PrintHelper.SetLayoutForRow(ReportPageEventArgs.PrintPageEventArgs.Graphics,Layouter,simpleContainer);
r = StandardPrinter.RenderContainer(simpleContainer,evaluator,currentPosition,ReportPageEventArgs);
currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r);
simpleContainer.Size = rs;
}
while (this.dataNavigator.MoveNext());
//-----
// }
}
public void old_Render (ISimpleContainer table,ReportPageEventArgs rpea,IExpressionEvaluatorFacade evaluator)
{
if (this.dataNavigator.CurrentRow < 0 ) {
this.dataNavigator.MoveNext();
}
this.reportPageEventArgs = rpea;
Point saveLocation = table.Location;
Rectangle pageBreakRect = Rectangle.Empty;
Point currentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.currentSection,table).Location.X,
this.currentSection.Location.Y);
table.Items.SortByLocation();
Size rs = Size.Empty;
foreach (BaseRowItem row in table.Items)
{
rs = row.Size;
PrintHelper.AdjustParent(table as BaseReportItem,table.Items);
if (PrintHelper.IsTextOnlyRow(row) )
{
PrintHelper.SetLayoutForRow(ReportPageEventArgs.PrintPageEventArgs.Graphics,Layouter,row);
Rectangle r = StandardPrinter.RenderContainer(row,evaluator,currentPosition,ReportPageEventArgs);
currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r);
table.Location = saveLocation;
}
else {
int adjust = row.Location.Y - saveLocation.Y;
row.Location = new Point(row.Location.X,row.Location.Y - adjust - 3 * GlobalValues.GapBetweenContainer);
rs = row.Size;
do {
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)table,currentPosition);
if (PrintHelper.IsPageFull(parentRectangle,this.SectionBounds)) {
Console.WriteLine("PageBreak - PageFull");
table.Location = saveLocation;
AbstractRenderer.PageBreak(ReportPageEventArgs);
return;
}
this.dataNavigator.Fill(row.Items);
PrintHelper.SetLayoutForRow(ReportPageEventArgs.PrintPageEventArgs.Graphics,Layouter,row);
Rectangle r = StandardPrinter.RenderContainer(row,evaluator,currentPosition,ReportPageEventArgs);
currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r);
row.Size = rs;
}
while (this.dataNavigator.MoveNext());
}
row.Size = rs;
}
// base.NotifyAfterPrint (rpea.LocationAfterDraw);
}
public ICSharpCode.Reports.Core.BaseClasses.SectionBounds SectionBounds {
get {
return this.singlePage.SectionBounds;
}
}
public IDataNavigator DataNavigator {
get {
return this.dataNavigator;
}
}
public System.Drawing.Rectangle ParentRectangle {
get {
return this.parentRectangle;
}
}
public ISinglePage SinglePage {
get {
return this.singlePage;
}
}
public ILayouter Layouter {
get {
return this.layouter;
}
}
public System.Drawing.Graphics Graphics {get;set;}
public ReportPageEventArgs ReportPageEventArgs {
get { return reportPageEventArgs; }
set { reportPageEventArgs = value; }
}
}
}

38
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RendererFactory.cs

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 10.10.2010
* Time: 17:28
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Drawing;
using ICSharpCode.Reports.Core.Interfaces;
namespace ICSharpCode.Reports.Core
{
/// <summary>
/// Description of RendererFactory.
/// </summary>
public class PrintRendererFactory
{
public static IBaseRenderer CreateRenderer (BaseReportItem itemToConvert,IDataNavigator dataNavigator,
ISinglePage singlePage,ILayouter layouter,BaseSection section)
{
Type t = itemToConvert.GetType();
if (t.Equals(typeof(BaseTableItem))) {
Console.WriteLine("render Table");
return new RenderTable(dataNavigator,Rectangle.Empty,singlePage,layouter,section);
}
if (t.Equals(typeof(BaseRowItem))) {
// return new GroupedRowConverter (dataNavigator,singlePage,layouter);
Console.WriteLine("render Row");
}
return null;
}
}
}
Loading…
Cancel
Save