Browse Source

Merge remote branch 'origin/reports' into 4.0

pull/14/head
Daniel Grunwald 15 years ago
parent
commit
55edf3e0c4
  1. 2
      samples/SharpDevelopReports/src/SharpReportSamples/MainForm.cs
  2. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.Reports.Addin.csproj
  3. 44
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupItem.cs
  4. 22
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/GroupFooter.cs
  5. 7
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/GroupHeader.cs
  6. 40
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs
  7. 53
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs
  8. 66
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs
  9. 9
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/PushModelPanel.cs
  10. 18
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Toolbox/ToolboxProvider.cs
  11. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/ICSharpCode.Reports.Addin.Test.csproj
  12. 108
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenerateListWithGroupFixture.cs
  13. 46
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenerateTableWithGrouping.cs
  14. 6
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj
  15. 24
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/Layouter.cs
  16. 6
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs
  17. 23
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SectionBounds.cs
  18. 7
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SinglePage.cs
  19. 17
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupItem.cs
  20. 22
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs
  21. 24
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/GroupFooter.cs
  22. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/GroupHeader.cs
  23. 22
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs
  24. 14
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs
  25. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs
  26. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs
  27. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs
  28. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs
  29. 30
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/GroupChangedEventArgs.cs
  30. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/PrintEventArgs.cs
  31. 51
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/ReportParametersEventArgs.cs
  32. 69
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/SectionRenderEventArgs.cs
  33. 87
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs
  34. 163
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs
  35. 111
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs
  36. 125
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs
  37. 64
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs
  38. 17
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ExpressionEvaluatorFacade.cs
  39. 124
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ReportingLanguage/ReportingLanguageCompiler.cs
  40. 5
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs
  41. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/IReportCreator.cs
  42. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs
  43. 92
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderTable.cs
  44. 92
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/ReportViewer.cs
  45. 20
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs
  46. 14
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFromIListFixture.cs
  47. 8
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/GlobalFunctions.cs

2
samples/SharpDevelopReports/src/SharpReportSamples/MainForm.cs

@ -13,7 +13,7 @@ using System.IO; @@ -13,7 +13,7 @@ using System.IO;
using System.Windows.Forms;
using ICSharpCode.Reports.Core;
using ICSharpCode.Reports.Core.old_Exporter.ExportRenderer;
using ICSharpCode.Reports.Core.Exporter.ExportRenderer;
namespace SharpReportSamples
{

4
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.Reports.Addin.csproj

@ -145,7 +145,7 @@ @@ -145,7 +145,7 @@
<Compile Include="Project\ReportItems\BaseDataItem.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Project\ReportItems\BaseGroupItem.cs" />
<Compile Include="Project\ReportItems\GroupFooter.cs" />
<Compile Include="Project\ReportItems\BaseImageItem.cs">
<SubType>Component</SubType>
</Compile>
@ -170,7 +170,7 @@ @@ -170,7 +170,7 @@
<Compile Include="Project\ReportItems\ErrorItem.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Project\ReportItems\BaseGroupedRow.cs" />
<Compile Include="Project\ReportItems\GroupHeader.cs" />
<Compile Include="Project\ReportItems\RectangleItemTypeProvider.cs" />
<Compile Include="Project\ReportManagers\BaseManager.cs" />
<Compile Include="Project\ReportManagers\StandartPreviewManager.cs" />

44
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupItem.cs

@ -1,44 +0,0 @@ @@ -1,44 +0,0 @@
// 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.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using ICSharpCode.Reports.Core;
using ICSharpCode.Reports.Core.BaseClasses.Printing;
namespace ICSharpCode.Reports.Addin
{
/// <summary>
/// Description of BaseGroupItem.
/// </summary>
///
[Designer(typeof(ICSharpCode.Reports.Addin.Designer.GroupHeaderDesigner))]
public class BaseGroupItem:BaseDataItem
{
public BaseGroupItem()
{
}
[System.ComponentModel.EditorBrowsableAttribute()]
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
// if (Text.CompareTo(ColumnName) != 0 ) {
// Text = ColumnName;
// }
base.OnPaint(e);
this.Draw(e.Graphics);
}
public override void Draw(Graphics graphics)
{
base.Draw (graphics);
}
}
}

22
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/GroupFooter.cs

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 07.11.2010
* Time: 19:33
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
namespace ICSharpCode.Reports.Addin
{
/// <summary>
/// Description of BaseGroupFooter.
/// </summary>
public class GroupFooter:GroupHeader
{
public GroupFooter()
{
}
}
}

7
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs → src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/GroupHeader.cs

@ -15,13 +15,14 @@ namespace ICSharpCode.Reports.Addin @@ -15,13 +15,14 @@ namespace ICSharpCode.Reports.Addin
/// Description of GroupedRow.
/// </summary>
[Designer(typeof(ICSharpCode.Reports.Addin.Designer.GroupedRowDesigner))]
public class BaseGroupedRow:BaseRowItem
public class GroupHeader:BaseRowItem
{
public BaseGroupedRow()
public GroupHeader()
{
TypeDescriptor.AddProvider(new GroupedRowTypeProvider(), typeof(BaseGroupedRow));
TypeDescriptor.AddProvider(new GroupedRowTypeProvider(), typeof(GroupHeader));
}
[Category("Behavior")]
public bool PageBreakOnGroupChange {get;set;}
}

40
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs

@ -77,7 +77,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -77,7 +77,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
item.Location = p;
}
protected static void AdjustContainer (ISimpleContainer parent,
ICSharpCode.Reports.Core.BaseReportItem item)
{
@ -92,9 +92,9 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -92,9 +92,9 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
#region HeaderColumns
protected static ICSharpCode.Reports.Core.BaseRowItem CreateRowWithTextColumns(ISimpleContainer parent,ReportItemCollection items)
protected ICSharpCode.Reports.Core.BaseRowItem CreateRowWithTextColumns(ISimpleContainer parent)
{
ReportItemCollection colDetail = AbstractLayout.HeaderColumnsFromReportItems(items);
ReportItemCollection colDetail = AbstractLayout.HeaderColumnsFromReportItems(ReportItems);
ICSharpCode.Reports.Core.BaseRowItem row = new ICSharpCode.Reports.Core.BaseRowItem();
AdjustContainer(parent,row);
@ -136,15 +136,15 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -136,15 +136,15 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
#endregion
protected ReportItemCollection AddItemsToContainer (ReportItemCollection items)
protected ReportItemCollection AddItemsToContainer ()
{
int locationX = GlobalValues.ControlMargins.Left;
var minCtrlWidth = CalculateControlWidth(ParentItem,items);
var minCtrlWidth = CalculateControlWidth(Container,ReportItems);
var col = new ReportItemCollection();
foreach (var ir in items) {
foreach (var ir in ReportItems) {
ir.Location = new Point(locationX,GlobalValues.ControlMargins.Top);
col.Add(ir);
locationX += minCtrlWidth;
@ -155,13 +155,13 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -155,13 +155,13 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
protected static int CalculateControlWidth(ISimpleContainer row, ReportItemCollection colDetail)
{
return row.Size.Width / colDetail.Count;
return row.Size.Width / colDetail.Count;
}
#region Grouping
protected ICSharpCode.Reports.Core.BaseGroupedRow CreateGroupHeader(Point headerLocation)
protected ICSharpCode.Reports.Core.GroupHeader CreateGroupHeader(Point headerLocation)
{
ICSharpCode.Reports.Core.BaseDataItem dataItem = new ICSharpCode.Reports.Core.BaseDataItem();
@ -172,19 +172,37 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -172,19 +172,37 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
dataItem.Size = new Size (150,20);
dataItem.Text = ReportModel.ReportSettings.GroupColumnsCollection[0].ColumnName;
ICSharpCode.Reports.Core.BaseGroupedRow groupHeader = new ICSharpCode.Reports.Core.BaseGroupedRow();
ICSharpCode.Reports.Core.GroupHeader groupHeader = new ICSharpCode.Reports.Core.GroupHeader();
groupHeader.Location = headerLocation;
groupHeader.Size = new Size (300,dataItem.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
groupHeader.Items.Add(dataItem);
return groupHeader;
}
protected ICSharpCode.Reports.Core.GroupFooter CreateFooter (Point footerLocation)
{
ICSharpCode.Reports.Core.GroupFooter groupFooter = new ICSharpCode.Reports.Core.GroupFooter();
groupFooter.Location = footerLocation;
groupFooter.Size = new Size (300,30);
return groupFooter;
}
protected void ConfigureDetails (Point detailLocation,Size detailSize)
{
Container.Location = detailLocation;
Container.Size = detailSize;
}
#endregion
protected ReportModel ReportModel {get; private set;}
protected ISimpleContainer ParentItem {get;set;}
protected ISimpleContainer Container {get;set;}
protected ReportItemCollection ReportItems {get;set;}
}
}

53
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs

@ -15,15 +15,12 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -15,15 +15,12 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
public class ListLayout : AbstractLayout
{
ReportItemCollection reportItems;
public ListLayout(ReportModel reportModel,ReportItemCollection reportItemCollection):base(reportModel)
{
this.reportItems = reportItemCollection;
base.ReportItems = reportItemCollection;
ICSharpCode.Reports.Core.BaseRowItem row = new ICSharpCode.Reports.Core.BaseRowItem();
AdjustContainer(base.ReportModel.DetailSection,row);
base.ParentItem = row;
base.Container = row;
}
@ -33,9 +30,9 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -33,9 +30,9 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
public override void CreatePageHeader()
{
base.CreatePageHeader();
ICSharpCode.Reports.Core.BaseRowItem row = CreateRowWithTextColumns(base.ReportModel.PageHeader,
this.reportItems);
AdjustContainer(ParentItem,row);
ICSharpCode.Reports.Core.BaseRowItem row = CreateRowWithTextColumns(base.ReportModel.PageHeader);
AdjustContainer(Container,row);
base.ReportModel.PageHeader.Items.Add(row);
}
@ -45,23 +42,43 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -45,23 +42,43 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
if (section == null) {
throw new ArgumentNullException("section");
}
Size detailSize = Size.Empty;
Size itemSize = Size.Empty;
Point rowLoction = Point.Empty;
if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0)
{
var groupheader = base.CreateGroupHeader(new Point (GlobalValues.ControlMargins.Left,GlobalValues.ControlMargins.Top));
base.ReportModel.DetailSection.Items.Add(groupheader);
ParentItem.Location = new Point(ParentItem.Location.X,50);
ParentItem.Size = new Size(ParentItem.Size.Width,40);
section.Size = new Size(section.Size.Width,90);
// Detail
itemSize = CreateDetail();
detailSize = new Size(Container.Size.Width,itemSize.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
// GroupFooter
var groupFooter = base.CreateFooter(new Point(GlobalValues.ControlMargins.Left,80));
base.ReportModel.DetailSection.Items.Add(groupFooter);
section.Size = new Size(section.Size.Width,125);
rowLoction = new Point (Container.Location.X,45);
}
var items = base.AddItemsToContainer(this.reportItems);
ParentItem.Items.AddRange(items);
ParentItem.Size = new Size(ParentItem.Size.Width,items[0].Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
section.Items.Add(ParentItem as BaseReportItem);
else
{
itemSize = CreateDetail();
detailSize = new Size(Container.Size.Width,itemSize.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
section.Size = new Size(section.Size.Width,Container.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
rowLoction = new Point(Container.Location.X,GlobalValues.ControlMargins.Top);
}
base.ConfigureDetails (rowLoction,detailSize);
section.Items.Add(Container as BaseReportItem);
}
Size CreateDetail()
{
var items = base.AddItemsToContainer();
Container.Items.AddRange(items);
return items[0].Size;
}
#endregion

66
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs

@ -14,12 +14,10 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -14,12 +14,10 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
public class TableLayout: AbstractLayout
{
ReportItemCollection reportItems;
public TableLayout(ReportModel reportModel,ReportItemCollection reportItemCollection):base(reportModel)
{
this.reportItems = reportItemCollection;
ReportItems = reportItemCollection;
}
@ -39,62 +37,76 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -39,62 +37,76 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
System.Drawing.Printing.Margins margin = GlobalValues.ControlMargins;
ICSharpCode.Reports.Core.BaseTableItem table = new ICSharpCode.Reports.Core.BaseTableItem();
ICSharpCode.Reports.Core.BaseRowItem detailRow = new ICSharpCode.Reports.Core.BaseRowItem();
table.Name = "Table1";
base.Container = table;
AdjustContainer(base.ReportModel.DetailSection,table);
base.ReportModel.DetailSection.Items.Add(table);
base.ParentItem = table;
ICSharpCode.Reports.Core.BaseRowItem headerRow = CreateRowWithTextColumns(ParentItem, this.reportItems);
ParentItem.Items.Add (headerRow);
ICSharpCode.Reports.Core.BaseRowItem headerRow = CreateRowWithTextColumns(Container);
Container.Items.Add (headerRow);
Point insertLocation = new Point (margin.Left,headerRow.Location.Y + headerRow.Size.Height + margin.Bottom + margin.Top);
if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) {
if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) {
//Groupheader
var groupHeader = base.CreateGroupHeader(insertLocation);
ParentItem.Items.Add(groupHeader);
Container.Items.Add(groupHeader);
insertLocation = new Point(margin.Left,insertLocation.Y + groupHeader.Size.Height + margin.Bottom + margin.Top);
//Detail
CreateDetail(detailRow,insertLocation);
Container.Items.Add (detailRow);
// GroupFooter
var groupFooter = base.CreateFooter(new Point(margin.Left,130));
Container.Items.Add(groupFooter);
}
else
{
CreateDetail(detailRow,insertLocation);
Container.Items.Add (detailRow);
}
//Insert details allways
ICSharpCode.Reports.Core.BaseRowItem detailRow = new ICSharpCode.Reports.Core.BaseRowItem();
AdjustContainer (ParentItem,detailRow);
CalculateContainerSize();
section.Size = new Size (section.Size.Width,Container.Size.Height + margin.Top + margin.Bottom);
}
void CreateDetail (ICSharpCode.Reports.Core.BaseRowItem detailRow,Point insertLocation)
{
AdjustContainer (Container,detailRow);
detailRow.Location = insertLocation;
detailRow.Size = new Size(detailRow.Size.Width,30);
int defX = AbstractLayout.CalculateControlWidth(detailRow,reportItems);
int defX = AbstractLayout.CalculateControlWidth(detailRow,ReportItems);
int startX = margin.Left;
int startX = GlobalValues.ControlMargins.Left;
foreach (ICSharpCode.Reports.Core.BaseReportItem ir in this.reportItems)
foreach (ICSharpCode.Reports.Core.BaseReportItem ir in ReportItems)
{
Point np = new Point(startX,margin.Top);
Point np = new Point(startX,GlobalValues.ControlMargins.Top);
startX += defX;
ir.Location = np;
ir.Parent = detailRow;
detailRow.Items.Add(ir);
}
ParentItem.Items.Add (detailRow);
ParentItem.Size = CalculateContainerSize(ParentItem);
section.Size = new Size (section.Size.Width,ParentItem.Size.Height + margin.Top + margin.Bottom);
}
private Size CalculateContainerSize(ISimpleContainer container)
private void CalculateContainerSize()
{
int h = GlobalValues.ControlMargins.Top;
foreach (ICSharpCode.Reports.Core.BaseReportItem item in container.Items)
foreach (ICSharpCode.Reports.Core.BaseReportItem item in Container.Items)
{
h = h + item.Size.Height + GlobalValues.ControlMargins.Bottom;
}
h = h + 3*GlobalValues.ControlMargins.Bottom;
return new Size (container.Size.Width,h);
Container.Size = new Size (Container.Size.Width,h);
}
}
}

9
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/PushModelPanel.cs

@ -9,7 +9,6 @@ using System.Windows.Forms; @@ -9,7 +9,6 @@ using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.Reports.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.Reports.Addin.ReportWizard
{
@ -52,14 +51,16 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -52,14 +51,16 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
fdiag.DefaultExt = GlobalValues.XsdExtension;
fdiag.Filter = GlobalValues.XsdFileFilter;
fdiag.Multiselect = false;
if (fdiag.ShowDialog() == DialogResult.OK) {
if (fdiag.ShowDialog() == DialogResult.OK)
{
string fileName = fdiag.FileName;
this.txtPath.Text = fileName;
FillDataGrid(fileName);
base.EnableNext = true;
base.EnableFinish= true;
}
}
base.EnableNext = true;
base.EnableFinish= true;
}

18
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Toolbox/ToolboxProvider.cs

@ -67,19 +67,21 @@ namespace ICSharpCode.Reports.Addin @@ -67,19 +67,21 @@ namespace ICSharpCode.Reports.Addin
tb.DisplayName = ResourceService.GetString("SharpReport.Toolbar.DataRow");
sideTab.Items.Add(new SideTabItemDesigner(tb));
/*
//Group
tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.BaseGroupItem));
//GroupHeader
tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.GroupHeader));
tb.Bitmap = WinFormsResourceService.GetBitmap("Icons.16x16.SharpQuery.Table");
tb.DisplayName = "SimpleGroupItem";
tb.DisplayName = "GroupHeader";
sideTab.Items.Add(new SideTabItemDesigner(tb));
*/
//GroupHeader
tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.BaseGroupedRow));
//GroupFooter
tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.GroupFooter));
tb.Bitmap = WinFormsResourceService.GetBitmap("Icons.16x16.SharpQuery.Table");
tb.DisplayName = "GroupHeaderRow";
tb.DisplayName = "GroupFooter";
sideTab.Items.Add(new SideTabItemDesigner(tb));
//BaseTable
tb.Bitmap = WinFormsResourceService.GetBitmap("Icons.16x16.SharpQuery.Table");
tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.BaseTableItem));

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/ICSharpCode.Reports.Addin.Test.csproj

@ -69,8 +69,8 @@ @@ -69,8 +69,8 @@
<Compile Include="Wizard\Generators\GenerateListWithGroupFixture.cs" />
<Compile Include="Wizard\Generators\GeneratePlainReportFixture_2.cs" />
<Compile Include="Wizard\Generators\GenerateTableReportFixture.cs" />
<Compile Include="Wizard\Generators\GenerateTableWithGrouping.cs" />
<Compile Include="Wizard\Generators\GeneratorFactoryFixture.cs" />
<Compile Include="Wizard\Generators\GenertaeTableWithgroupFixture.cs" />
<Compile Include="Wizard\Generators\ReportGenerationHelper.cs" />
<Compile Include="Wizard\ReportStructureFixture.cs" />
</ItemGroup>

108
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenerateListWithGroupFixture.cs

@ -3,6 +3,9 @@ @@ -3,6 +3,9 @@
using System;
using System.ComponentModel;
using System.Collections.ObjectModel;
using System.Linq;
using ICSharpCode.Reports.Addin.ReportWizard;
using ICSharpCode.Reports.Core;
using NUnit.Framework;
@ -21,68 +24,45 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -21,68 +24,45 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
[Test]
public void PageDetail_First_Item_Should_GroupedRow()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
BaseReportItem item = s.Items[0];
Assert.That(item,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseGroupedRow)));
}
[Test]
public void GroupHeader_Should_Contain_DataItem()
public void PageDetail_Should_Contains_GroupedHeader()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
ICSharpCode.Reports.Core.BaseGroupedRow groupedRow = (ICSharpCode.Reports.Core.BaseGroupedRow)s.Items[0];
var item = groupedRow.Items[0];
Assert.That(item,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseDataItem)));
ICSharpCode.Reports.Core.BaseSection section = this.reportModel.DetailSection;
//GroupHeader
var c = new Collection<ICSharpCode.Reports.Core.GroupHeader>(section.Items.OfType<ICSharpCode.Reports.Core.GroupHeader>().ToList());
Assert.That(c.Count,Is.GreaterThanOrEqualTo(1));
}
[Test]
public void PageDetail_Second_Item_Should_Row()
public void Section_Should_Contain_DataRow()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
BaseReportItem item = s.Items[1];
Assert.That(item,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseRowItem)));
ICSharpCode.Reports.Core.BaseSection section = this.reportModel.DetailSection;
//DatatRow
var c = new Collection<ICSharpCode.Reports.Core.BaseRowItem>(section.Items.OfType<ICSharpCode.Reports.Core.BaseRowItem>().ToList());
Assert.That(c.Count,Is.GreaterThanOrEqualTo(1));
}
[Test]
public void DataRow_Should_Contain_DataItem()
public void DataRow_Should_Contain_GroupFooter()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
ICSharpCode.Reports.Core.BaseRowItem dataRow = (ICSharpCode.Reports.Core.BaseRowItem)s.Items[1];
var item = dataRow.Items[0];
Assert.That(item,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseDataItem)));
ICSharpCode.Reports.Core.BaseSection section = this.reportModel.DetailSection;
//GroupFooter
var c = new Collection<ICSharpCode.Reports.Core.GroupFooter>(section.Items.OfType<ICSharpCode.Reports.Core.GroupFooter>().ToList());
Assert.That(c.Count,Is.GreaterThanOrEqualTo(1));
}
[Test]
public void PageDetail_Should_Contain_Two_items()
public void PageDetail_Should_Contain_Three_Items()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
Assert.That(s.Items.Count.Equals(2));
ICSharpCode.Reports.Core.BaseSection section = this.reportModel.DetailSection;
Assert.That(section.Items.Count.Equals(3));
}
[Test]
public void PageDetail_First_Item_Should_Contain_GroupedRow()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
Assert.That(s.Items.Count.Equals(2));
}
[Test]
public void PageDetail_Row_Should_Contain_DataItems()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
ICSharpCode.Reports.Core.BaseRowItem rowItem = (ICSharpCode.Reports.Core.BaseRowItem)s.Items[0];
Assert.IsTrue(rowItem.Items.Count > 0);
BaseReportItem item = rowItem.Items[0];
Assert.That(item,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseDataItem)));
}
#region Setup/Teardown
@ -99,45 +79,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -99,45 +79,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
{
// TODO: Add tear down code.
}
/*
private static ReportModel CreateModel (string reportName)
{
ReportStructure structure = CreateReportStructure(reportName);
AvailableFieldsCollection abstractColumns = new AvailableFieldsCollection();
AbstractColumn a1 = new AbstractColumn("Field1",typeof(System.String));
structure.AvailableFieldsCollection.Add(a1);
ICSharpCode.Reports.Core.BaseDataItem bri = new ICSharpCode.Reports.Core.BaseDataItem();
bri.Name ="Field1";
structure.ReportItemCollection.Add(bri);
structure.Grouping = "group";
ReportModel m = structure.CreateAndFillReportModel();
ICSharpCode.Core.Properties customizer = new ICSharpCode.Core.Properties();
customizer.Set("Generator", structure);
customizer.Set("ReportLayout",GlobalEnums.ReportLayout.ListLayout);
IReportGenerator generator = new GeneratePushDataReport(m,customizer);
generator.GenerateReport();
ReportLoader rl = new ReportLoader();
object root = rl.Load(generator.XmlReport.DocumentElement);
ReportModel model = root as ReportModel;
if (model != null) {
model.ReportSettings.FileName = GlobalValues.PlainFileName;
FilePathConverter.AdjustReportName(model);
} else {
throw new InvalidReportModelException();
}
return model;
}
*/
private static ReportStructure CreateReportStructure (string reportName)
{
ReportStructure structure = new ReportStructure();

46
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenertaeTableWithgroupFixture.cs → src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenerateTableWithGrouping.cs

@ -8,6 +8,8 @@ @@ -8,6 +8,8 @@
*/
using System;
using System.Collections.ObjectModel;
using System.Linq;
using ICSharpCode.Reports.Addin.ReportWizard;
using ICSharpCode.Reports.Core;
using NUnit.Framework;
@ -23,40 +25,48 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -23,40 +25,48 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
[Test]
public void PageDetail_First_Item_Should_Table()
public void Table_Should_Contains_GroupedHeader()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
var item = s.Items[0];
Assert.That(item,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseTableItem)));
ICSharpCode.Reports.Core.BaseTableItem table = CreateContainer();
//GroupHeader
var c = new Collection<ICSharpCode.Reports.Core.GroupHeader>(table.Items.OfType<ICSharpCode.Reports.Core.GroupHeader>().ToList());
Assert.That(c.Count,Is.GreaterThanOrEqualTo(1));
}
[Test]
public void Table_Should_Contain_Three_Rows()
public void Table_Should_Contain_DataRow()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
ICSharpCode.Reports.Core.BaseTableItem table = s.Items[0] as ICSharpCode.Reports.Core.BaseTableItem;
Assert.That(table.Items.Count,Is.GreaterThanOrEqualTo(3));
ICSharpCode.Reports.Core.BaseTableItem table = CreateContainer();
//DataRow
var c = new Collection<ICSharpCode.Reports.Core.BaseRowItem>(table.Items.OfType<ICSharpCode.Reports.Core.BaseRowItem>().ToList());
Assert.That(c.Count,Is.GreaterThanOrEqualTo(1));
}
[Test]
public void Table_FirstItem_Should_Row ()
public void Table_Should_Contain_GroupFooter()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
ICSharpCode.Reports.Core.BaseTableItem table = s.Items[0] as ICSharpCode.Reports.Core.BaseTableItem;
var row = table.Items[0];
Assert.That(row,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseRowItem)));
ICSharpCode.Reports.Core.BaseTableItem table = CreateContainer();
//GroupFooter
var c = new Collection<ICSharpCode.Reports.Core.GroupFooter>(table.Items.OfType<ICSharpCode.Reports.Core.GroupFooter>().ToList());
Assert.That(c.Count,Is.GreaterThanOrEqualTo(1));
}
[Test]
public void Table_SecondItem_Should_GroupRow ()
public void PageDetail_Should_Contain_Four_Items()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
ICSharpCode.Reports.Core.BaseTableItem table = s.Items[0] as ICSharpCode.Reports.Core.BaseTableItem;
var row = table.Items[1];
Assert.That(row,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseGroupedRow)));
ICSharpCode.Reports.Core.BaseTableItem table = CreateContainer();
Assert.That(table.Items.Count.Equals(4));
}
private ICSharpCode.Reports.Core.BaseTableItem CreateContainer ()
{
ICSharpCode.Reports.Core.BaseSection section = this.reportModel.DetailSection;
ICSharpCode.Reports.Core.BaseTableItem table = section.Items[0] as ICSharpCode.Reports.Core.BaseTableItem;
return table;
}
#region setup / TearDown

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

@ -89,8 +89,8 @@ @@ -89,8 +89,8 @@
<Compile Include="Project\BaseClasses\SinglePage.cs" />
<Compile Include="Project\BaseClasses\SectionBounds.cs" />
<Compile Include="Project\BaseClasses\SortColumn.cs" />
<Compile Include="Project\BaseItems\BaseGroupedRow.cs" />
<Compile Include="Project\BaseItems\BaseGroupItem.cs" />
<Compile Include="Project\BaseItems\GroupHeader.cs" />
<Compile Include="Project\BaseItems\GroupFooter.cs" />
<Compile Include="Project\BaseItems\BaseTextItem.cs" />
<Compile Include="Project\BaseItems\BaseGraphicItem.cs" />
<Compile Include="Project\BaseItems\BaseReportItem.cs" />
@ -124,10 +124,8 @@ @@ -124,10 +124,8 @@
</Compile>
<Compile Include="Project\Dialogs\DefaultTextEditor.cs" />
<Compile Include="Project\Dialogs\SortingCollectionEditor.cs" />
<Compile Include="Project\Events\GroupChangedEventArgs.cs" />
<Compile Include="Project\Events\NewPageEventArgs.cs" />
<Compile Include="Project\Events\ReportPageEventArgs.cs" />
<Compile Include="Project\Events\ReportParametersEventArgs.cs" />
<Compile Include="Project\Exceptions\FieldNotFoundException.cs" />
<Compile Include="Project\Exceptions\GroupLevelException.cs" />
<Compile Include="Project\Exceptions\IllegalFileFormat.cs" />

24
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/Layouter.cs

@ -33,18 +33,32 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -33,18 +33,32 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
return Rectangle.Empty;
}
Console.WriteLine("\tlayouter for container <{0}>",container.ToString());
Rectangle desiredContainerRectangle = new Rectangle (container.Location,container.Size);
System.Collections.Generic.IEnumerable<BaseReportItem> canGrowShrinkCollection = from bt in container.Items where bt.CanGrow == true select bt;
if (canGrowShrinkCollection.Count() > 0 ) {
Rectangle surroundingRec = FindSurroundingRectangle(graphics,canGrowShrinkCollection);
// desiredContainerRectangle = new Rectangle(container.Location.X,
// container.Location.Y,
// container.Size.Width,
// surroundingRec.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
//
desiredContainerRectangle = new Rectangle(container.Location.X,
container.Location.Y,
container.Size.Width,
surroundingRec.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
surroundingRec.Size.Height);
// var r1 = new Rectangle(container.Location.X,
// container.Location.Y,
// container.Size.Width,
// surroundingRec.Size.Height);
//
// Console.WriteLine("Diff {0} - {1} dif {2}",desiredContainerRectangle,r1,desiredContainerRectangle.Height - r1.Height);
}
Console.WriteLine("\tContainer : {0} - DesiredContainerRectangle {1} ",container.Size,desiredContainerRectangle.Size);
return desiredContainerRectangle;
}
@ -58,7 +72,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -58,7 +72,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
throw new ArgumentNullException("section");
}
Console.WriteLine("layouter for {0}",section.Name);
Console.WriteLine("\tlayouter for section <{0}>",section.Name);
IEnumerable<BaseReportItem> canGrowShrinkCollection = from bt in section.Items where bt.CanGrow == true select bt;
@ -72,12 +86,14 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -72,12 +86,14 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
Rectangle surroundingRec = FindSurroundingRectangle(graphics,canGrowShrinkCollection);
if (surroundingRec.Height > desiredSectionRectangle .Height) {
desiredSectionRectangle = new Rectangle(section.Location.X,
section .Location.Y,
section .Size.Width,
surroundingRec.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom );
surroundingRec.Size.Height);
}
}
Console.WriteLine("\tSection : {0} - DesiredContainerRectangle {1} ",section.Size,desiredSectionRectangle.Size);
return desiredSectionRectangle;
}

6
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs

@ -259,9 +259,9 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -259,9 +259,9 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
foreach (BaseExportColumn element in row) {
ExportText textItem = element as ExportText;
if (textItem != null) {
if (textItem.Text.StartsWith("=")) {
Console.WriteLine(textItem.Text);
}
// if (textItem.Text.StartsWith("=",StringComparison.InvariantCulture)) {
//// Console.WriteLine(textItem.Text);
// }
textItem.Text = evaluator.Evaluate(textItem.Text);
}
}

23
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SectionBounds.cs

@ -38,9 +38,9 @@ namespace ICSharpCode.Reports.Core.BaseClasses @@ -38,9 +38,9 @@ namespace ICSharpCode.Reports.Core.BaseClasses
bool firstPage;
bool landscape;
// int gap = 1;
Rectangle printableArea;
#region Constructor
@ -103,20 +103,20 @@ namespace ICSharpCode.Reports.Core.BaseClasses @@ -103,20 +103,20 @@ namespace ICSharpCode.Reports.Core.BaseClasses
}
//Test
public void MeasurePageFooter (IReportItem section)
public void MeasurePageFooter (IReportItem section)
{
if (section == null) {
throw new ArgumentNullException("section");
}
this.pageFooterRectangle = new Rectangle(this.printableArea.Location.X,
this.marginBounds.Bottom - section.Size.Height,
this.marginBounds.Width,
section.Size.Height);
}
//Test
public void MeasureReportFooter (IReportItem section)
{
@ -224,18 +224,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses @@ -224,18 +224,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses
}
}
/// <summary>
/// gap between two Sections
/// </summary>
// public int Gap
// {
// get {
// return gap;
// }
// }
public Rectangle DetailSectionRectangle {get;set;}

7
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SinglePage.cs

@ -37,15 +37,10 @@ namespace ICSharpCode.Reports.Core.BaseClasses @@ -37,15 +37,10 @@ namespace ICSharpCode.Reports.Core.BaseClasses
}
sectionBounds.MeasureReportHeader(reportModel.ReportHeader);
//PageHeader
this.sectionBounds.MeasurePageHeader(reportModel.PageHeader);
//PageFooter
this.sectionBounds.MeasurePageFooter(reportModel.PageFooter);
//ReportFooter
this.sectionBounds.MeasureReportFooter(reportModel.ReportFooter);
this.sectionBounds.MeasureDetailArea();

17
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupItem.cs

@ -1,17 +0,0 @@ @@ -1,17 +0,0 @@
// 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;
namespace ICSharpCode.Reports.Core
{
/// <summary>
/// Description of BaseGroupeItem.
/// </summary>
public class BaseGroupItem:BaseDataItem
{
public BaseGroupItem():base()
{
}
}
}

22
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs

@ -19,7 +19,7 @@ namespace ICSharpCode.Reports.Core @@ -19,7 +19,7 @@ namespace ICSharpCode.Reports.Core
public class BaseSection : BaseReportItem,ISimpleContainer
{
private bool pageBreakAfter;
// private bool pageBreakAfter;
private ReportItemCollection items;
public event EventHandler<SectionEventArgs> SectionPrinting;
@ -120,13 +120,6 @@ namespace ICSharpCode.Reports.Core @@ -120,13 +120,6 @@ namespace ICSharpCode.Reports.Core
public int SectionMargin {get;set;}
public override System.Drawing.Point Location
{
get { return base.Location; }
set { base.Location = value; }
}
public ReportItemCollection Items
{
get {
@ -138,17 +131,8 @@ namespace ICSharpCode.Reports.Core @@ -138,17 +131,8 @@ namespace ICSharpCode.Reports.Core
}
public virtual bool PageBreakAfter
{
get {
return pageBreakAfter;
}
set {
pageBreakAfter = value;
}
}
public virtual bool PageBreakAfter {get;set;}
#endregion
#region System.IDisposable interface implementation

24
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/GroupFooter.cs

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 07.11.2010
* Time: 19:44
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
namespace ICSharpCode.Reports.Core
{
/// <summary>
/// Description of BaseGroupeFooter.
/// </summary>
public class GroupFooter:GroupHeader
{
public GroupFooter()
{
}
}
}

4
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupedRow.cs → src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/GroupHeader.cs

@ -8,9 +8,9 @@ namespace ICSharpCode.Reports.Core @@ -8,9 +8,9 @@ namespace ICSharpCode.Reports.Core
/// <summary>
/// Description of BaseGroupeRow.
/// </summary>
public class BaseGroupedRow:BaseRowItem
public class GroupHeader:BaseRowItem
{
public BaseGroupedRow():base()
public GroupHeader():base()
{
}

22
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs

@ -152,8 +152,7 @@ namespace ICSharpCode.Reports.Core{ @@ -152,8 +152,7 @@ namespace ICSharpCode.Reports.Core{
public bool IsGrouped
{
get {
return (this[0] is BaseGroupedRow)|| (this[0] is BaseGroupItem) ;
//return CreateGroupedList().Count > 0;
return (this[0] is GroupHeader) ;
}
}
@ -175,28 +174,9 @@ namespace ICSharpCode.Reports.Core{ @@ -175,28 +174,9 @@ namespace ICSharpCode.Reports.Core{
}
private Collection<BaseGroupItem> old_CreateGroupedList ()
{
Collection<BaseGroupItem> inheritedReportItems = null;
foreach (BaseReportItem element in this) {
ISimpleContainer container = element as ISimpleContainer;
if (container == null) {
inheritedReportItems = new Collection<BaseGroupItem>(this.OfType<BaseGroupItem>().ToList());
break;
} else {
inheritedReportItems = new Collection<BaseGroupItem>(container.Items.OfType<BaseGroupItem>().ToList());
break;
}
}
return inheritedReportItems;
}
public ReportItemCollection ExtractGroupedColumns ()
{
Collection<BaseDataItem> inheritedReportItems = CreateGroupedList();
// Collection<BaseGroupItem> inheritedReportItems = CreateGroupedList();
ReportItemCollection r = new ReportItemCollection();
r.AddRange(inheritedReportItems);
return r;

14
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs

@ -13,7 +13,7 @@ namespace ICSharpCode.Reports.Core @@ -13,7 +13,7 @@ namespace ICSharpCode.Reports.Core
{
private IndexList indexList;
private IDataViewStrategy store;
private System.Collections.Generic.List<BaseComparer>.Enumerator genEnumerator;
private System.Collections.Generic.List<BaseComparer>.Enumerator enumerator;
public ChildNavigator(IDataViewStrategy dataStore,IndexList indexList)
{
@ -22,8 +22,8 @@ namespace ICSharpCode.Reports.Core @@ -22,8 +22,8 @@ namespace ICSharpCode.Reports.Core
}
this.store = dataStore;
this.indexList = indexList;
genEnumerator = this.indexList.GetEnumerator();
genEnumerator.MoveNext();
enumerator = this.indexList.GetEnumerator();
enumerator.MoveNext();
}
@ -71,7 +71,8 @@ namespace ICSharpCode.Reports.Core @@ -71,7 +71,8 @@ namespace ICSharpCode.Reports.Core
public object Current {
get {
TableStrategy t = this.store as TableStrategy;
return t.myCurrent(genEnumerator.Current.ListIndex);
// return t.myCurrent(enumerator.Current.ListIndex);
return t.myCurrent(this.indexList[CurrentRow].ListIndex);
}
}
@ -125,11 +126,6 @@ namespace ICSharpCode.Reports.Core @@ -125,11 +126,6 @@ namespace ICSharpCode.Reports.Core
}
public void FillChild(ReportItemCollection collection)
{
throw new NotImplementedException();
}
private IndexList BuildChildList()
{
GroupComparer gc = this.indexList[this.indexList.CurrentPosition] as GroupComparer;

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs

@ -107,7 +107,7 @@ namespace ICSharpCode.Reports.Core @@ -107,7 +107,7 @@ namespace ICSharpCode.Reports.Core
return ((ind != null) && (ind.Count > 0));
}
}
private IndexList BuildChildList()
{

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

@ -110,7 +110,7 @@ namespace ICSharpCode.Reports.Core { @@ -110,7 +110,7 @@ namespace ICSharpCode.Reports.Core {
}
compVal = v;
}
ShowIndexList(IndexList);
// ShowIndexList(IndexList);
}
@ -133,6 +133,7 @@ namespace ICSharpCode.Reports.Core { @@ -133,6 +133,7 @@ namespace ICSharpCode.Reports.Core {
protected static void ShowIndexList (IndexList list)
{
foreach (BaseComparer element in list) {
string s = String.Format("{0} ",element.ObjectArray[0]);
GroupComparer gc = element as GroupComparer;

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs

@ -166,7 +166,7 @@ namespace ICSharpCode.Reports.Core { @@ -166,7 +166,7 @@ namespace ICSharpCode.Reports.Core {
base.Group();
IndexList gl = new IndexList("group");
gl = this.BuildSortIndex (ReportSettings.GroupColumnsCollection);
ShowIndexList(gl);
// ShowIndexList(gl);
base.BuildGroup(gl);
}

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs

@ -101,7 +101,7 @@ namespace ICSharpCode.Reports.Core @@ -101,7 +101,7 @@ namespace ICSharpCode.Reports.Core
base.Group();
IndexList sortedIndexList = new IndexList("group");
sortedIndexList = this.BuildSortIndex (ReportSettings.GroupColumnsCollection);
ShowIndexList(sortedIndexList);
// ShowIndexList(sortedIndexList);
BuildGroup(sortedIndexList);
}

30
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/GroupChangedEventArgs.cs

@ -1,30 +0,0 @@ @@ -1,30 +0,0 @@
// 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;
/// <summary>
///
/// </summary>
/// <remarks>
/// created by - Forstmeier Peter
/// created on - 29.11.2005 16:48:53
/// </remarks>
namespace ICSharpCode.Reports.Core {
/*
public class GroupChangedEventArgs : System.EventArgs {
GroupSeparator groupSeparator;
public GroupChangedEventArgs(GroupSeparator groupSeperator)
{
this.groupSeparator = groupSeperator;
}
public GroupSeparator GroupSeparator {
get {
return groupSeparator;
}
}
}
*/
}

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/PrintEventArgs.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.Reports.Core { @@ -44,7 +44,7 @@ namespace ICSharpCode.Reports.Core {
}
/// <summary>
/// This Event is fiered after an Item is printed
/// This Event is fired after an Item is printed
/// </summary>
public class AfterPrintEventArgs : System.EventArgs {
PointF locationAfterPrint;

51
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/ReportParametersEventArgs.cs

@ -1,51 +0,0 @@ @@ -1,51 +0,0 @@
// 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)
namespace ICSharpCode.Reports.Core {
using System;
/// <summary>
/// This Event is fired when SharpReport need Parameters to run a Query
/// as an example, have a look to SharpReportView, there we will use this event
/// </summary>
/// <remarks>
/// created by - Forstmeier Peter
/// created on - 23.06.2005 22:55:10
/// </remarks>
public class ReportParametersEventArgs : System.EventArgs {
ParameterCollection sqlParametersCollection;
string reportName;
public ReportParametersEventArgs () {
}
/// <summary>
/// The ParametersCollection
/// </summary>
public ParameterCollection SqlParametersCollection {
get {
if (this.sqlParametersCollection == null) {
this.sqlParametersCollection = new ParameterCollection();
}
return sqlParametersCollection;
}
}
/// <summary>
/// The ReportName
/// </summary>
public string ReportName {
get {
return reportName;
}
set {
reportName = value;
}
}
}
}

69
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/SectionRenderEventArgs.cs

@ -8,38 +8,65 @@ namespace ICSharpCode.Reports.Core { @@ -8,38 +8,65 @@ namespace ICSharpCode.Reports.Core {
/// Description of SectionRenderEventArgs.
/// </summary>
public class GroupFooterEventArgs: EventArgs
{
public GroupFooterEventArgs (GroupFooter groupFooter)
{
GroupFooter = groupFooter;
}
public GroupFooter GroupFooter {get; private set;}
}
public class GroupHeaderEventArgs: EventArgs
{
public GroupHeaderEventArgs (GroupHeader groupHeader)
{
GroupHeader = groupHeader;
}
public GroupHeader GroupHeader {get; private set;}
}
public class RowRenderEventArgs : EventArgs
{
public RowRenderEventArgs (BaseRowItem row,object rowData)
{
Row = row;
RowData = rowData;
}
public BaseRowItem Row {get; private set;}
public object RowData {get; private set;}
}
public class SectionRenderEventArgs:SectionEventArgs{
private int pageNumber;
private int rowNumber;
private BaseSection currentSection;
public SectionRenderEventArgs(BaseSection section,
int pageNumber,int rowNumber,
BaseSection currentSection):base(section){
this.pageNumber = pageNumber;
this.currentSection = currentSection;
this.rowNumber = rowNumber;
this.PageNumber = pageNumber;
this.CurrentSection = currentSection;
this.RowNumber = rowNumber;
}
public int PageNumber {
get {
return pageNumber;
}
}
public int PageNumber {get; private set;}
public int RowNumber {
get {
return rowNumber;
}
}
public int RowNumber {get; private set;}
public BaseSection CurrentSection {
get {
return currentSection;
}
}
public BaseSection CurrentSection {get; private set;}
}
}

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

@ -16,12 +16,14 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -16,12 +16,14 @@ namespace ICSharpCode.Reports.Core.Exporter
public class BasePager:IReportCreator
{
private PagesCollection pages;
private Graphics graphics;
private readonly object pageLock = new object();
private ILayouter layouter;
public event EventHandler<PageCreatedEventArgs> PageCreated;
public event EventHandler<SectionRenderEventArgs> SectionRendering;
public event EventHandler<GroupHeaderEventArgs> GroupHeaderRendering;
public event EventHandler<GroupFooterEventArgs> GroupFooterRendering;
public event EventHandler<RowRenderEventArgs> RowRendering;
#region Constructor
@ -34,8 +36,8 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -34,8 +36,8 @@ namespace ICSharpCode.Reports.Core.Exporter
throw new ArgumentNullException ("layouter");
}
this.ReportModel = reportModel;
this.layouter = layouter;
this.graphics = CreateGraphicObject.FromSize(this.ReportModel.ReportSettings.PageSize);
this.Layouter = layouter;
this.Graphics = CreateGraphicObject.FromSize(this.ReportModel.ReportSettings.PageSize);
}
#endregion
@ -72,7 +74,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -72,7 +74,7 @@ namespace ICSharpCode.Reports.Core.Exporter
protected virtual void BuildNewPage ()
{
this.SinglePage = this.InitNewPage();
PrintHelper.InitPage(this.SinglePage,this.ReportModel.ReportSettings);
PrintHelper.InitPage(this.SinglePage,this.ReportModel.ReportSettings);
this.SinglePage.CalculatePageBounds(this.ReportModel);
}
@ -94,6 +96,13 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -94,6 +96,13 @@ namespace ICSharpCode.Reports.Core.Exporter
Point offset = new Point(section.Location.X,section.SectionOffset);
// Call layouter only once per section
Rectangle desiredRectangle = Layouter.Layout(this.Graphics,section);
Rectangle sectionRectangle = new Rectangle(section.Location,section.Size);
if (!sectionRectangle.Contains(desiredRectangle)) {
section.Size = new Size(section.Size.Width,desiredRectangle.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
}
foreach (BaseReportItem item in section.Items) {
ISimpleContainer container = item as ISimpleContainer;
@ -101,8 +110,8 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -101,8 +110,8 @@ namespace ICSharpCode.Reports.Core.Exporter
if (container != null) {
ExportContainer exportContainer = StandardPrinter.ConvertToContainer(container,offset);
StandardPrinter.AdjustBackColor (container);
StandardPrinter.AdjustBackColor (container);
ExporterCollection clist = StandardPrinter.ConvertPlainCollection(container.Items,offset);
@ -110,14 +119,6 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -110,14 +119,6 @@ namespace ICSharpCode.Reports.Core.Exporter
list.Add(exportContainer);
} else {
Rectangle desiredRectangle = layouter.Layout(this.graphics,section);
Rectangle sectionRectangle = new Rectangle(0,0,section.Size.Width,section.Size.Height);
if (!sectionRectangle.Contains(desiredRectangle)) {
section.Size = new Size(section.Size.Width,desiredRectangle.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
}
list = StandardPrinter.ConvertPlainCollection(section.Items,offset);
}
}
@ -197,8 +198,8 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -197,8 +198,8 @@ namespace ICSharpCode.Reports.Core.Exporter
private static void EvaluateRecursive (IExpressionEvaluatorFacade evaluatorFassade,ExporterCollection items)
{
foreach (BaseExportColumn be in items) {
IExportContainer ec = be as IExportContainer;
if (ec != null)
{
@ -207,31 +208,22 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -207,31 +208,22 @@ namespace ICSharpCode.Reports.Core.Exporter
}
}
ExportText et = be as ExportText;
if (et != null) {
try{
if (et.Text.StartsWith("=Globals!Page")) {
Console.WriteLine ("wxpression : {0}",evaluatorFassade.Evaluate(et.Text));
}
if (et.Text.StartsWith("=")) {
et.Text = evaluatorFassade.Evaluate(et.Text);
}
catch (UnknownFunctionException ufe)
{
et.Text = GlobalValues.UnkownFunctionMessage(ufe.Message);
}
finally
{
}
}
}
}
#endregion
#region Event's
protected void FireSectionRenderEvent (BaseSection section,int currentRow)
{
SectionRenderEventArgs ea =
@ -244,7 +236,25 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -244,7 +236,25 @@ namespace ICSharpCode.Reports.Core.Exporter
}
protected void FireGroupHeaderEvent (GroupHeaderEventArgs ghea)
{
EventHelper.Raise<GroupHeaderEventArgs>(GroupHeaderRendering,this,ghea);
}
protected void FireGroupFooterEvent (GroupFooterEventArgs gfea)
{
EventHelper.Raise<GroupFooterEventArgs>(GroupFooterRendering,this,gfea);
}
protected void FireRowRenderEvent (RowRenderEventArgs rrea)
{
EventHelper.Raise<RowRenderEventArgs>(RowRendering,this,rrea);
}
protected void FirePageCreated(ExporterPage page)
{
EventHelper.Raise<PageCreatedEventArgs>(PageCreated,this,
@ -255,14 +265,9 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -255,14 +265,9 @@ namespace ICSharpCode.Reports.Core.Exporter
#region Property's
protected Graphics Graphics {
get { return graphics; }
}
protected Graphics Graphics {get; private set;}
public ILayouter Layouter {
get { return layouter; }
}
public ILayouter Layouter {get; private set;}
public IReportModel ReportModel {get;set;}
@ -286,14 +291,6 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -286,14 +291,6 @@ namespace ICSharpCode.Reports.Core.Exporter
get { return SinglePage.SectionBounds; }
}
// protected bool PageFull
// {
// get { return pageFull; }
// set { pageFull = value; }
// }
//
#endregion
}
}

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

@ -22,18 +22,14 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -22,18 +22,14 @@ namespace ICSharpCode.Reports.Core.Exporter
public class BaseConverter:IBaseConverter
{
private IDataNavigator dataNavigator;
private ExporterPage singlePage;
private SectionBounds sectionBounds;
private Rectangle parentRectangle;
private ILayouter layouter;
private Size saveSize;
private IExpressionEvaluatorFacade evaluator;
public event EventHandler <NewPageEventArgs> PageFull;
public event EventHandler<SectionRenderEventArgs> SectionRendering;
public event EventHandler<GroupHeaderEventArgs> GroupHeaderRendering;
public event EventHandler<GroupFooterEventArgs> GroupFooterRendering;
public event EventHandler<RowRenderEventArgs> RowRendering;
public BaseConverter(IDataNavigator dataNavigator,ExporterPage singlePage,
ILayouter layouter)
@ -48,11 +44,11 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -48,11 +44,11 @@ namespace ICSharpCode.Reports.Core.Exporter
if (layouter == null) {
throw new ArgumentNullException("layouter");
}
this.singlePage = singlePage;
this.dataNavigator = dataNavigator;
this.sectionBounds = this.singlePage.SectionBounds;
this.layouter = layouter;
this.evaluator = StandardPrinter.CreateEvaluator(this.singlePage,this.dataNavigator);
this.SinglePage = singlePage;
this.DataNavigator = dataNavigator;
SectionBounds = this.SinglePage.SectionBounds;
this.Layouter = layouter;
this.Evaluator = StandardPrinter.CreateEvaluator(this.SinglePage,this.DataNavigator);
}
@ -74,16 +70,46 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -74,16 +70,46 @@ namespace ICSharpCode.Reports.Core.Exporter
#endregion
#region Events
protected void FireRowRendering (ISimpleContainer detailRow,IDataNavigator currentNavigator)
{
BaseRowItem row = detailRow as BaseRowItem;
if (row == null) {
throw new ArgumentException("row");
}
Console.WriteLine("\tFireRowRendering");
RowRenderEventArgs rrea = new RowRenderEventArgs(row,currentNavigator.Current);
EventHelper.Raise<RowRenderEventArgs>(RowRendering,this,rrea);
}
protected void FireGroupHeaderRendering (GroupHeader groupHeader)
{
Console.WriteLine("\tFireGroupHeaderRendering");
GroupHeaderEventArgs ghea = new GroupHeaderEventArgs(groupHeader);
EventHelper.Raise<GroupHeaderEventArgs>(GroupHeaderRendering,this,ghea);
}
protected void FireGroupFooterRendering (GroupFooter groupFooter)
{
Console.WriteLine("\tFireGroupFooterRendering");
GroupFooterEventArgs gfea = new GroupFooterEventArgs(groupFooter);
EventHelper.Raise<GroupFooterEventArgs>(GroupFooterRendering,this,gfea);
}
protected void FireSectionRendering (BaseSection section)
{
SectionRenderEventArgs srea = new SectionRenderEventArgs(section,
this.SinglePage.PageNumber,
this.dataNavigator.CurrentRow,
this.DataNavigator.CurrentRow,
section);
EventHelper.Raise<SectionRenderEventArgs>(SectionRendering,this,srea);
}
#endregion
protected static ExporterCollection ConvertItems (ISimpleContainer row,Point offset)
@ -110,18 +136,44 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -110,18 +136,44 @@ namespace ICSharpCode.Reports.Core.Exporter
#region Grouping
protected Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition)
protected void ConvertGroupFooter (BaseSection section,ISimpleContainer container,ExporterCollection exporterCollection)
{
var footers = BaseConverter.FindGroupFooter(container);
if (footers.Count > 0) {
Size rowSize = footers[0].Size;
CurrentPosition = ConvertStandardRow(exporterCollection,section,(ISimpleContainer)footers[0]);
FireGroupFooterRendering(footers[0]);
footers[0].Size = rowSize;
}
}
protected Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section,
ISimpleContainer simpleContainer)
{
PrepareContainerForConverting(section,simpleContainer);
Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
AfterConverting (section,mylist);
Point curPos = ConvertContainer(mylist,simpleContainer,DefaultLeftPosition,CurrentPosition);
AfterConverting (mylist);
return curPos;
}
protected bool PageBreakAfterGroupChange(ISimpleContainer container)
protected void PageBreakAfterGroupChange(BaseSection section,ExporterCollection exporterCollection)
{
if (CheckPageBreakAfterGroupChange(section) ) {
if (DataNavigator.HasMoreData)
{
CurrentPosition = ForcePageBreak (exporterCollection,section);
}
}
}
private static bool CheckPageBreakAfterGroupChange(ISimpleContainer container)
{
var groupedRows = BaseConverter.FindGroups(container);
var groupedRows = BaseConverter.FindGroupHeader(container);
if (groupedRows.Count > 0) {
var groupedRow = groupedRows[0];
return groupedRow.PageBreakOnGroupChange;
@ -130,9 +182,15 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -130,9 +182,15 @@ namespace ICSharpCode.Reports.Core.Exporter
}
protected static Collection<BaseGroupedRow> FindGroups (ISimpleContainer container)
protected static Collection<GroupHeader> FindGroupHeader (ISimpleContainer container)
{
return new Collection<GroupHeader>(container.Items.OfType<GroupHeader>().ToList());
}
protected static Collection<GroupFooter> FindGroupFooter (ISimpleContainer container)
{
return new Collection<BaseGroupedRow>(container.Items.OfType<BaseGroupedRow>().ToList());
return new Collection<GroupFooter>(container.Items.OfType<GroupFooter>().ToList());
}
@ -148,39 +206,34 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -148,39 +206,34 @@ namespace ICSharpCode.Reports.Core.Exporter
public virtual ExporterCollection Convert(BaseReportItem parent, BaseReportItem item)
{
this.parentRectangle = new Rectangle(parent.Location,parent.Size);
this.ParentRectangle = new Rectangle(parent.Location,parent.Size);
return new ExporterCollection();;
}
public Point CurrentPosition {get;set;}
#endregion
public Rectangle ParentRectangle {
get { return parentRectangle; }
}
public ISinglePage SinglePage {
get { return singlePage; }
}
public Rectangle ParentRectangle {get;private set;}
public ISinglePage SinglePage {get;private set;}
public SectionBounds SectionBounds {get; private set;}
public SectionBounds SectionBounds {
get { return sectionBounds; }
}
public IDataNavigator DataNavigator {
get { return dataNavigator; }
}
public IDataNavigator DataNavigator {get;private set;}
public ILayouter Layouter {get; private set;}
public ILayouter Layouter {
get { return layouter; }
}
public Graphics Graphics {get;set;}
protected IExpressionEvaluatorFacade Evaluator{get;private set;}
protected int DefaultLeftPosition {get;set;}
protected void SaveSectionSize(Size size)
{
@ -188,53 +241,47 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -188,53 +241,47 @@ namespace ICSharpCode.Reports.Core.Exporter
}
protected Size RestoreSize
protected Size RestoreSectionSize
{
get {return this.saveSize;}
}
protected IExpressionEvaluatorFacade Evaluator
protected Point ConvertStandardRow(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer)
{
get {return this.evaluator;}
var rowSize = simpleContainer.Size;
PrepareContainerForConverting(section,simpleContainer);
Point curPos = ConvertContainer(mylist,simpleContainer,DefaultLeftPosition,CurrentPosition);
AfterConverting (mylist);
simpleContainer.Size = rowSize;
return curPos;
}
protected void PrepareContainerForConverting(BaseSection section,ISimpleContainer simpleContainer)
{
if (section != null) {
FireSectionRendering(section);
}
FireSectionRendering(section);
LayoutRow(simpleContainer);
}
protected void AfterConverting (BaseSection section,ExporterCollection convertedList)
protected void AfterConverting (ExporterCollection convertedList)
{
StandardPrinter.EvaluateRow(Evaluator,convertedList);
}
protected Point ConvertStandardRow(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition)
{
FillRow(simpleContainer);
PrepareContainerForConverting(section,simpleContainer);
Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
AfterConverting (section,mylist);
return curPos;
}
protected static Point BaseConvert(ExporterCollection myList,ISimpleContainer container,int leftPos,Point curPos)
public static Point ConvertContainer(ExporterCollection myList,ISimpleContainer container,int leftPos,Point curPos)
{
ExporterCollection ml = BaseConverter.ConvertItems (container, curPos);
myList.AddRange(ml);
return new Point (leftPos,curPos.Y + container.Size.Height + (3 *GlobalValues.GapBetweenContainer));
return new Point (leftPos,curPos.Y + container.Size.Height);
}
private void FillRow (ISimpleContainer row)
protected void FillRow (ISimpleContainer row)
{
Console.WriteLine("\tFillRow");
DataNavigator.Fill(row.Items);
}

111
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs

@ -42,8 +42,8 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -42,8 +42,8 @@ namespace ICSharpCode.Reports.Core.Exporter
if (PrintHelper.IsTextOnlyRow(simpleContainer)) {
ExporterCollection myList = new ExporterCollection();
BaseConverter.BaseConvert (myList,simpleContainer,parent.Location.X,
new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y));
ConvertContainer (myList,simpleContainer,parent.Location.X,
new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y));
return myList;
} else {
@ -58,27 +58,16 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -58,27 +58,16 @@ namespace ICSharpCode.Reports.Core.Exporter
base.CurrentPosition = new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y);
BaseSection section = parent as BaseSection;
int defaultLeftPos = parent.Location.X;
DefaultLeftPosition = parent.Location.X;
Size groupSize = Size.Empty;
Size childSize = Size.Empty;
Console.WriteLine("-------------------START");
Console.WriteLine ("section {0}",section.Size);
Console.WriteLine();
if (section.Items.IsGrouped)
{
groupSize = section.Items[0].Size;
childSize = section.Items[1].Size;
Console.WriteLine ("group {0}",section.Items[0].Size);
Console.WriteLine ("detail {0}",section.Items[1].Size);
}
Rectangle pageBreakRect = Rectangle.Empty;
do {
base.SaveSectionSize(section.Size);
@ -93,78 +82,55 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -93,78 +82,55 @@ namespace ICSharpCode.Reports.Core.Exporter
base.Evaluator.SinglePage.IDataNavigator = childNavigator;
base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,base.CurrentPosition);
base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,base.CurrentPosition);
section.Size = base.RestoreSize;
section.Size = base.RestoreSectionSize;
section.Items[0].Size = groupSize;
section.Items[1].Size = childSize;
childNavigator.Reset();
childNavigator.MoveNext();
Console.WriteLine("-------------------after group");
Console.WriteLine ("section {0}",section.Size);
Console.WriteLine ("group {0}",section.Items[0].Size);
Console.WriteLine ("detail {0}",section.Items[1].Size);
Console.WriteLine();
//Convert children
if (childNavigator != null) {
StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor);
do
{
Console.WriteLine("-----------------childs");
Console.WriteLine ("section {0}",section.Size);
Console.WriteLine ("group {0}",section.Items[0].Size);
Console.WriteLine ("detail {0}",section.Items[1].Size);
Console.WriteLine();
section.Size = base.RestoreSize;
Console.WriteLine("");
section.Size = base.RestoreSectionSize;
section.Items[0].Size = groupSize;
section.Items[1].Size = childSize;
Console.WriteLine("\tFillRow");
childNavigator.Fill(simpleContainer.Items);
base.CurrentPosition = ConvertGroupChilds (exporterCollection,section,
simpleContainer,defaultLeftPos,base.CurrentPosition);
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],base.CurrentPosition);
// section.Items[1].Size = base.RestoreSize;
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds )) {
base.CurrentPosition = ForcePageBreak (exporterCollection,section);
}
base.CurrentPosition = ConvertGroupChilds (exporterCollection,section,simpleContainer);
FireRowRendering(simpleContainer,childNavigator);
CheckForPageBreak(section,exporterCollection);
Console.WriteLine("");
}
while ( childNavigator.MoveNext());
if (PageBreakAfterGroupChange(section) ) {
if ( base.DataNavigator.HasMoreData)
{
base.CurrentPosition = ForcePageBreak (exporterCollection,section);
}
}
// GroupFooter
base.ConvertGroupFooter(section,section,exporterCollection);
base.PageBreakAfterGroupChange(section,exporterCollection);
base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator;
}
}
else
{
// No Grouping at all
Size dd = section.Items[0].Size;
Console.WriteLine("---------NoGrouping");
Console.WriteLine ("section {0}",section.Size);
Console.WriteLine ("row {0}",dd);
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,base.CurrentPosition);
section.Size = base.RestoreSize;
section.Items[0].Size = dd;
}
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],base.CurrentPosition);
// No Grouping at all, the first item in section.items is the DetailRow
Console.WriteLine("");
Size containerSize = section.Items[0].Size;
base.FillRow(simpleContainer);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) {
base.CurrentPosition = ForcePageBreak (exporterCollection,section);
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer);
base.FireRowRendering(simpleContainer,base.DataNavigator);
section.Size = base.RestoreSectionSize;
section.Items[0].Size = containerSize;
Console.WriteLine("");
}
CheckForPageBreak (section,exporterCollection);
ShouldDrawBorder (section,exporterCollection);
}
while (base.DataNavigator.MoveNext());
@ -178,6 +144,16 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -178,6 +144,16 @@ namespace ICSharpCode.Reports.Core.Exporter
}
void CheckForPageBreak(BaseSection section, ExporterCollection exporterCollection)
{
var pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],base.CurrentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) {
base.CurrentPosition = ForcePageBreak (exporterCollection,section);
}
}
protected override Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section)
{
base.ForcePageBreak(exporterCollection,section);
@ -191,11 +167,12 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -191,11 +167,12 @@ namespace ICSharpCode.Reports.Core.Exporter
}
private Point ConvertGroupHeader(ExporterCollection exportList,BaseSection section,int leftPos,Point offset)
private Point ConvertGroupHeader(ExporterCollection exportList,BaseSection section,Point offset)
{
var retVal = Point.Empty;
var rowSize = Size.Empty;
ReportItemCollection groupCollection = null;
var groupedRows = BaseConverter.FindGroups(section);
var groupedRows = BaseConverter.FindGroupHeader(section);
if (groupedRows.Count == 0) {
groupCollection = section.Items.ExtractGroupedColumns();
base.DataNavigator.Fill(groupCollection);
@ -205,10 +182,14 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -205,10 +182,14 @@ namespace ICSharpCode.Reports.Core.Exporter
StandardPrinter.EvaluateRow(base.Evaluator,list);
exportList.AddRange(list);
AfterConverting (section,list);
retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer));
AfterConverting (list);
retVal = new Point (DefaultLeftPosition,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer));
} else {
retVal = ConvertStandardRow(exportList,section,groupedRows[0],leftPos,offset);
FillRow(groupedRows[0]);
rowSize = groupedRows[0].Size;
retVal = ConvertStandardRow(exportList,section,groupedRows[0]);
base.FireGroupHeaderRendering(groupedRows[0]);
groupedRows[0].Size = rowSize;
}
return retVal;
}

125
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs

@ -49,33 +49,36 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -49,33 +49,36 @@ namespace ICSharpCode.Reports.Core.Exporter
BaseSection section = table.Parent as BaseSection;
base.CurrentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.table.Parent,this.table).Location.X,
base.SectionBounds.DetailStart.Y);
int defaultLeftPos = base.CurrentPosition.X;
ISimpleContainer headerRow = null;
Point dataAreaStart = new Point(table.Items[0].Location.X,table.Items[0].Location.Y + base.CurrentPosition.Y);
ISimpleContainer headerRow = null;
Rectangle pageBreakRect = Rectangle.Empty;
base.CurrentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.table.Parent,this.table).Location.X,
base.SectionBounds.DetailStart.Y);
base.DefaultLeftPosition = base.CurrentPosition.X;
this.table.Items.SortByLocation();
// Header
var simpleContainer = table.Items[0] as ISimpleContainer;
Size containerSize = Size.Empty;
if (simpleContainer.Items.Count > 0)
{
simpleContainer.Location = new Point (simpleContainer.Location.X,simpleContainer.Location.Y);
simpleContainer.Parent = (BaseReportItem)this.table;
base.SaveSectionSize( new Size (simpleContainer.Size.Width,simpleContainer.Size.Height));
base.SaveSectionSize(section.Size);
containerSize = simpleContainer.Size;
if (PrintHelper.IsTextOnlyRow(simpleContainer) ) {
headerRow = simpleContainer;
base.CurrentPosition = BaseConverter.BaseConvert(exporterCollection,headerRow,defaultLeftPos,base.CurrentPosition);
base.PrepareContainerForConverting(section,headerRow);
base.CurrentPosition = ConvertContainer(exporterCollection,headerRow,base.DefaultLeftPosition,base.CurrentPosition);
}
BaseGroupedRow row = table.Items[1] as BaseGroupedRow;
GroupHeader row = table.Items[1] as GroupHeader;
if (row != null) {
@ -88,7 +91,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -88,7 +91,7 @@ namespace ICSharpCode.Reports.Core.Exporter
base.Evaluator.SinglePage.IDataNavigator = childNavigator;
// Convert Grouping Header
base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,base.CurrentPosition);
base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,base.CurrentPosition);
childNavigator.Reset();
childNavigator.MoveNext();
@ -99,31 +102,21 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -99,31 +102,21 @@ namespace ICSharpCode.Reports.Core.Exporter
{
StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor);
simpleContainer = table.Items[2] as ISimpleContainer;
containerSize = simpleContainer.Size;
childNavigator.Fill(simpleContainer.Items);
base.CurrentPosition = ConvertGroupChilds (exporterCollection,
section,
simpleContainer,defaultLeftPos,base.CurrentPosition);
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,base.CurrentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds))
{
base.CurrentPosition = base.ForcePageBreak(exporterCollection,section);
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,base.CurrentPosition);
}
base.CurrentPosition = ConvertGroupChilds (exporterCollection,section,simpleContainer);
simpleContainer.Size = containerSize;
CheckForPageBreak(section,simpleContainer,headerRow,exporterCollection);
}
while ( childNavigator.MoveNext());
if (PageBreakAfterGroupChange(table) )
{
if ( base.DataNavigator.HasMoreData)
{
base.CurrentPosition = base.ForcePageBreak(exporterCollection,section);
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,base.CurrentPosition);
}
}
// GroupFooter
base.ConvertGroupFooter(section,table,exporterCollection);
base.PageBreakAfterGroupChange(section,exporterCollection);
base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator;
}
@ -135,53 +128,73 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -135,53 +128,73 @@ namespace ICSharpCode.Reports.Core.Exporter
{
// No Grouping at all
base.SaveSectionSize(simpleContainer.Size);
simpleContainer = table.Items[1] as ISimpleContainer;
simpleContainer = table.Items[1] as ISimpleContainer;
base.SaveSectionSize(section.Size);
containerSize = simpleContainer.Size;
Console.WriteLine("datasection - NO grouping");
do {
Console.WriteLine("");
PrintHelper.AdjustSectionLocation(section);
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,base.CurrentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds))
{
base.CurrentPosition = base.ForcePageBreak(exporterCollection,section);
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,base.CurrentPosition);
}
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,base.CurrentPosition);
simpleContainer.Size = base.RestoreSize;
CheckForPageBreak(section,simpleContainer,headerRow,exporterCollection);
FillRow(simpleContainer);
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer);
FireRowRendering(simpleContainer,base.DataNavigator);
simpleContainer.Size = containerSize;
section.Size = base.RestoreSectionSize;
Console.WriteLine("");
}
while (base.DataNavigator.MoveNext());
Console.WriteLine("");
Console.WriteLine("END of datasection - NO grouping");
base.DataNavigator.Reset();
base.DataNavigator.MoveNext();
SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left,
base.CurrentPosition.Y,
SectionBounds.ReportFooterRectangle.Width,
SectionBounds.ReportFooterRectangle.Height);
SectionBounds.ReportFooterRectangle.Height);
}
}
return exporterCollection;
}
#region Pagebreak
void CheckForPageBreak(BaseSection section,ISimpleContainer container,ISimpleContainer headerRow, ExporterCollection exporterCollection)
{
var pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)container,base.CurrentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds))
{
base.CurrentPosition = ForcePageBreak(exporterCollection,section);
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,headerRow);
}
}
protected override Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section)
{
base.ForcePageBreak(exporterCollection, section);
return base.SectionBounds.ReportHeaderRectangle.Location;
}
//Copy from GroupedRow
private Point ConvertGroupHeader(ExporterCollection exportList,BaseSection section,int leftPos,Point offset)
#endregion
#region Grouping
private Point ConvertGroupHeader(ExporterCollection exportList,BaseSection section,Point offset)
{
var retVal = Point.Empty;
var rowSize = Size.Empty;
ReportItemCollection groupCollection = null;
var groupedRow = new Collection<BaseGroupedRow>(table.Items.OfType<BaseGroupedRow>().ToList());
var groupedRow = new Collection<GroupHeader>(table.Items.OfType<GroupHeader>().ToList());
if (groupedRow.Count == 0) {
groupCollection = section.Items.ExtractGroupedColumns();
base.DataNavigator.Fill(groupCollection);
base.FireSectionRendering(section);
@ -190,14 +203,20 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -190,14 +203,20 @@ namespace ICSharpCode.Reports.Core.Exporter
StandardPrinter.EvaluateRow(base.Evaluator,list);
exportList.AddRange(list);
AfterConverting (section,list);
retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer));
AfterConverting (list);
retVal = new Point (base.DefaultLeftPosition,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer));
} else {
retVal = ConvertStandardRow(exportList,section,groupedRow[0],leftPos,offset);
rowSize = groupedRow[0].Size;
base.FireGroupHeaderRendering(groupedRow[0]);
retVal = ConvertStandardRow(exportList,section,groupedRow[0]);
groupedRow[0].Size = rowSize;
}
return retVal;
}
#endregion
}
}

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

@ -13,10 +13,9 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -13,10 +13,9 @@ namespace ICSharpCode.Reports.Core.Exporter
{
IDataManager dataManager;
IDataNavigator dataNavigator;
readonly object addLock = new object();
//internal delegate ExporterCollection ConverterDelegate (BaseSection s);
#region Constructor
@ -89,8 +88,32 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -89,8 +88,32 @@ namespace ICSharpCode.Reports.Core.Exporter
protected override void BuildReportFooter (Rectangle footerRectangle)
{
base.ReportModel.ReportFooter.SectionOffset = footerRectangle.Top;
ExporterCollection convertedList = base.ConvertSection (base.ReportModel.ReportFooter,this.dataNavigator.CurrentRow);
bool pageBreak = false;
base.ReportModel.ReportFooter.SectionOffset = footerRectangle.Top + GlobalValues.GapBetweenContainer;
if (!PrintHelper.IsRoomForFooter(base.SectionBounds,base.ReportModel.ReportFooter.Location)) {
PageBreak();
base.ReportModel.ReportFooter.SectionOffset = SectionBounds.DetailStart.Y;
pageBreak = true;
}
ExporterCollection convertedList = new ExporterCollection();
var section = base.ReportModel.DetailSection;
var table = section.Items[0] as BaseTableItem;
if (table != null) {
if (pageBreak) {
// Print the HeaderRow
var headerRow = table.Items[0];
var curPos = BaseConverter.ConvertContainer(convertedList,(ISimpleContainer)headerRow,SectionBounds.PageHeaderRectangle.Left,SectionBounds.PageHeaderRectangle.Location);
base.SinglePage.Items.AddRange(convertedList);
base.ReportModel.ReportFooter.SectionOffset = curPos.Y + GlobalValues.GapBetweenContainer;
}
}
//allways print the reportFooter
convertedList = base.ConvertSection (base.ReportModel.ReportFooter,this.dataNavigator.CurrentRow);
base.SinglePage.Items.AddRange(convertedList);
}
@ -103,7 +126,6 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -103,7 +126,6 @@ namespace ICSharpCode.Reports.Core.Exporter
}
protected Point BuildDetail (BaseSection section,IDataNavigator dataNavigator)
{
ExporterCollection convertedList = new ExporterCollection();
@ -115,9 +137,12 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -115,9 +137,12 @@ namespace ICSharpCode.Reports.Core.Exporter
base.Layouter);
if (baseConverter != null) {
baseConverter.SectionRendering += OnSectionRendering;
baseConverter.GroupHeaderRendering += OnGroupHeaderRendering;
baseConverter.GroupFooterRendering += OnGroupFooterRendering;
baseConverter.RowRendering += OnRowRendering;
baseConverter.Graphics = base.Graphics;
baseConverter.PageFull += new EventHandler<NewPageEventArgs>(OnPageFull);
@ -133,12 +158,34 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -133,12 +158,34 @@ namespace ICSharpCode.Reports.Core.Exporter
void OnSectionRendering (object sender,SectionRenderEventArgs e)
{
// Console.WriteLine("Datapagebuilder : OnSectionRendering");
base.FireSectionRenderEvent(e.Section,e.RowNumber);
}
void OnGroupHeaderRendering (object sender, GroupHeaderEventArgs ghea)
{
// Console.WriteLine("Datapagebuilder : OnGroupHeaderRendering");
base.FireGroupHeaderEvent(ghea);
}
void OnGroupFooterRendering (object sender, GroupFooterEventArgs gfea)
{
// Console.WriteLine ("DatapageBuilder : OnGroupFooterEvent");
base.FireGroupFooterEvent(gfea);
}
void OnRowRendering (object sender,RowRenderEventArgs rrea)
{
// Console.WriteLine("Datapagebuilder : OnRowRendering");
base.FireRowRenderEvent(rrea);
}
#endregion
private void WritePages ()
{
this.dataNavigator = this.dataManager.GetNavigator;
@ -170,7 +217,6 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -170,7 +217,6 @@ namespace ICSharpCode.Reports.Core.Exporter
}
#region Public Methodes
protected override void AddPage (ExporterPage page)

17
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ExpressionEvaluatorFacade.cs

@ -33,13 +33,20 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage @@ -33,13 +33,20 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
public string Evaluate (string expression)
{
if (CanEvaluate(expression)) {
IExpression compiled = compiler.CompileExpression<string>(expression);
this.context.ContextObject = this.SinglePage;
if (compiled != null) {
return (compiled.Evaluate(context)).ToString();
try {
if (CanEvaluate(expression)) {
IExpression compiled = compiler.CompileExpression<string>(expression);
this.context.ContextObject = this.SinglePage;
if (compiled != null) {
return (compiled.Evaluate(context)).ToString();
}
}
} catch (Exception e) {
// Console.WriteLine("error");
expression = e.Message;
}
return expression;
}

124
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ReportingLanguage/ReportingLanguageCompiler.cs

@ -17,7 +17,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage @@ -17,7 +17,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
/// </summary>
public class ReportingLanguageCompiler:SimpleExpressionLanguageCompiler
{
private IPageInfo singlePage;
// private IPageInfo singlePage;
private ReportingLanguage reportingLanguage;
private Compiler compiler;
@ -97,9 +97,6 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage @@ -97,9 +97,6 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
return CompileExpressionNode(factory, astNode.ChildNodes[2]);
case "FieldsSectionStmt" :
//return CompileExpressionNode (factory,astNode.ChildNodes[2]);
object o0 =astNode.ChildNodes[0].Token.Text;
object o1 =astNode.ChildNodes[1].Token.Text;
object o2 =astNode.ChildNodes[2].Token.Text;
IExpression l = CompileExpressionNode(factory, astNode.ChildNodes[2]);
return factory.CreateFunction(astNode.ChildNodes[0].Token.Text,
l);
@ -187,122 +184,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage @@ -187,122 +184,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
}
// don't call base
protected IExpression old_CompileExpressionNode(IExpressionNodeFactory factory,ParseTreeNode astNode)
// protected override IExpression old_CompileExpressionNode(IExpressionNodeFactory factory,ParseTreeNode astNode)
{
switch (astNode.Term.Name)
{
case "Number":
var num = TypeNormalizer.EnsureType<double>(astNode.Token.Value);
return factory.CreateLiteral(num);
case "String":
var str = TypeNormalizer.EnsureType<string>(astNode.Token.Value);
return factory.CreateLiteral(str);
case "Boolean":
var bln = TypeNormalizer.EnsureType<bool>(astNode.Token.Value);
return factory.CreateLiteral(bln);
case "Identifier":
var variable = astNode.Token.Value;
if (variable != null)
return factory.CreateVariable(variable.ToString());
break;
case "Symbol" :
var str_1 = TypeNormalizer.EnsureType<string>(astNode.Token.Value);
return factory.CreateLiteral(str_1);
case "UserSectionStmt":
return factory.CreateFunction(astNode.ChildNodes[2].Token.Text,null);
case "GlobalSectionStmt" :
return factory.CreateLiteral(this.SinglePage.EvaluatePropertyPath(astNode.ChildNodes[2].Token.Text));
case "ParameterSectionStmt" :
return CompileExpressionNode(factory, astNode.ChildNodes[2]);
case "ParExpr" :
return CompileExpressionNode(factory, astNode.ChildNodes[0]);
case "BinExpr":
if (astNode.ChildNodes.Count == 3 &&
astNode.ChildNodes[1].Term is SymbolTerminal)
{
IExpression left = CompileExpressionNode(factory, astNode.ChildNodes[0]);
IExpression right = CompileExpressionNode(factory, astNode.ChildNodes[2]);
return factory.CreateBinaryOperator(astNode.ChildNodes[1].Term.Name, left, right);
}
if (astNode.ChildNodes.Count == 2 &&
astNode.ChildNodes[0].Term is SymbolTerminal)
{
IExpression arg = CompileExpressionNode(factory, astNode.ChildNodes[1]);
return factory.CreateUnaryOperator(astNode.ChildNodes[0].Term.Name, arg);
}
if (astNode.ChildNodes.Count == 2 &&
astNode.ChildNodes[1].Term is SymbolTerminal)
{
IExpression arg = CompileExpressionNode(factory, astNode.ChildNodes[0]);
return factory.CreateUnaryOperator(astNode.ChildNodes[1].Term.Name, arg);
}
break;
case "QualifiedName":
var parts = new List<string>();
if (astNode.ChildNodes.Count == 2)
return new QualifiedName(new[] {astNode.ChildNodes[1].Token.ValueString});
/*
//Condition ought to be impossible
if (astNode.ChildNodes.Count != 3 )
throw new Exception("Malformed QualifiedName - should have 3 child nodes");
*/
if (astNode.ChildNodes.Count == 1) {
return CompileExpressionNode(factory, astNode.ChildNodes[0]);
}
SimpleExpressionLanguageCompiler.ExtractQualifiedName(astNode, parts);
return new QualifiedName(parts.ToArray());
case "FunctionExpression":
string functionName = (astNode.ChildNodes[0].ChildNodes[0].Token.ValueString);
var args = new IExpression[astNode.ChildNodes[0].ChildNodes[0].ChildNodes.Count];
for (int i = 0; i < astNode.ChildNodes[0].ChildNodes[0].ChildNodes.Count;i++)
{
args[i] = CompileExpressionNode(factory, astNode.ChildNodes[1].ChildNodes[i]);
}
return factory.CreateFunction(functionName, args);
case "IfThen":
IExpression condition = CompileExpressionNode(factory,astNode.ChildNodes[1].ChildNodes[0]);
IExpression trueExpr = CompileExpressionNode(factory, astNode.ChildNodes[3]);
IExpression falseExpr = null;
if (astNode.ChildNodes.Count == 6)
falseExpr = CompileExpressionNode(factory, astNode.ChildNodes[5]);
var func = new IfThen();
if (falseExpr != null)
func.AcceptArguments(condition, trueExpr, falseExpr);
else
func.AcceptArguments(condition, trueExpr);
return func;
/*
case "ArrayExpression":
IExpression context = CompileExpressionNode(factory, astNode.ChildNodes[0]);
IExpression index = CompileExpressionNode(factory, astNode.ChildNodes[1]);
var indexer = new ItemAtIndex();
indexer.AcceptArguments(context, index);
return indexer;
*/
}
return null;
}
public IPageInfo SinglePage {
get { return singlePage; }
set { singlePage = value; }
}
public IPageInfo SinglePage {get;set;}
}
}

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

@ -124,9 +124,10 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.AggregateFunctions @@ -124,9 +124,10 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.AggregateFunctions
} else {
list.Add(true);
}
} else {
}
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/IReportCreator.cs

@ -15,5 +15,8 @@ namespace ICSharpCode.Reports.Core @@ -15,5 +15,8 @@ namespace ICSharpCode.Reports.Core
PagesCollection Pages{get;}
event EventHandler<PageCreatedEventArgs> PageCreated;
event EventHandler<SectionRenderEventArgs> SectionRendering;
event EventHandler<GroupHeaderEventArgs> GroupHeaderRendering;
event EventHandler<GroupFooterEventArgs> GroupFooterRendering;
event EventHandler<RowRenderEventArgs> RowRendering;
}
}

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

@ -18,6 +18,7 @@ namespace ICSharpCode.Reports.Core.Interfaces @@ -18,6 +18,7 @@ namespace ICSharpCode.Reports.Core.Interfaces
{
event EventHandler <NewPageEventArgs> PageFull;
event EventHandler<SectionRenderEventArgs> SectionRendering;
SectionBounds SectionBounds {get;}
IDataNavigator DataNavigator {get;}
Rectangle ParentRectangle {get;}
@ -36,5 +37,8 @@ namespace ICSharpCode.Reports.Core.Interfaces @@ -36,5 +37,8 @@ namespace ICSharpCode.Reports.Core.Interfaces
{
ExporterCollection Convert (BaseReportItem parent,BaseReportItem item);
Point CurrentPosition {get;set;}
event EventHandler<GroupHeaderEventArgs> GroupHeaderRendering;
event EventHandler<RowRenderEventArgs> RowRendering;
event EventHandler<GroupFooterEventArgs> GroupFooterRendering;
}
}

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

@ -25,8 +25,8 @@ namespace ICSharpCode.Reports.Core @@ -25,8 +25,8 @@ namespace ICSharpCode.Reports.Core
ISinglePage singlePage;
ILayouter layouter;
ReportPageEventArgs reportPageEventArgs;
BaseSection currentSection;
BaseSection currentSection;
public RenderTable(IDataNavigator datanavigator,Rectangle parentRectangle,ISinglePage singlePage,ILayouter layouter,BaseSection section)
{
this.dataNavigator = datanavigator;
@ -35,7 +35,7 @@ namespace ICSharpCode.Reports.Core @@ -35,7 +35,7 @@ namespace ICSharpCode.Reports.Core
this.singlePage = singlePage;
this.layouter = layouter;
this.currentSection = section;
}
@ -66,54 +66,54 @@ namespace ICSharpCode.Reports.Core @@ -66,54 +66,54 @@ namespace ICSharpCode.Reports.Core
// foreach (BaseRowItem row in table.Items)
// {
rs = simpleContainer.Size;
PrintHelper.AdjustParent(table as BaseReportItem,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;
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 = 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());
//-----
simpleContainer.Size = rs;
}
while (this.dataNavigator.MoveNext());
//-----
// }
}
@ -214,7 +214,7 @@ namespace ICSharpCode.Reports.Core @@ -214,7 +214,7 @@ namespace ICSharpCode.Reports.Core
public ILayouter Layouter {
get {
return this.layouter;
return this.layouter;
}
}
@ -225,6 +225,6 @@ namespace ICSharpCode.Reports.Core @@ -225,6 +225,6 @@ namespace ICSharpCode.Reports.Core
get { return reportPageEventArgs; }
set { reportPageEventArgs = value; }
}
}
}

92
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/ReportViewer.cs

@ -23,7 +23,7 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -23,7 +23,7 @@ namespace ICSharpCode.Reports.Core.ReportViewer
public partial class PreviewControl
{
public event EventHandler <EventArgs> PreviewLayoutChanged;
public event EventHandler<SectionRenderEventArgs> SectionRendering;
// public event EventHandler<SectionRenderEventArgs> SectionRendering;
private float zoom;
@ -166,6 +166,10 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -166,6 +166,10 @@ namespace ICSharpCode.Reports.Core.ReportViewer
ILayouter layouter = new Layouter();
IReportCreator reportCreator = DataPageBuilder.CreateInstance(reportModel,data,layouter);
reportCreator.SectionRendering += new EventHandler<SectionRenderEventArgs>(PushPrinting);
reportCreator.GroupHeaderRendering += new EventHandler<GroupHeaderEventArgs>(GroupHeaderRendering);
reportCreator.GroupFooterRendering += GroupFooterRendering;
reportCreator.RowRendering += new EventHandler<RowRenderEventArgs>(RowRendering);
reportCreator.PageCreated += OnPageCreated;
reportCreator.BuildExportList();
ShowCompleted();
@ -187,46 +191,62 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -187,46 +191,62 @@ namespace ICSharpCode.Reports.Core.ReportViewer
}
private void PushPrinting (object sender, SectionRenderEventArgs e ) {
EventHelper.Raise<SectionRenderEventArgs>(SectionRendering,this,e);
private void PushPrinting (object sender,SectionRenderEventArgs e)
{
string sectionName = e.Section.Name;
/*
if (sectionName == ReportSectionNames.ReportHeader) {
Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportHeader);
}
else if (sectionName == ReportSectionNames.ReportPageHeader) {
Console.WriteLine("PushPrinting :" +ReportSectionNames .ReportPageHeader);
}
else if (sectionName == ReportSectionNames.ReportDetail){
Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportDetail);
}
else if (sectionName == ReportSectionNames.ReportPageFooter){
Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportPageFooter);
}
else if (sectionName == ReportSectionNames.ReportFooter){
Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportFooter);
}
else{
throw new WrongSectionException(sectionName);
}
*/
}
private void GroupHeaderRendering (object sender, GroupHeaderEventArgs ghea)
{
Console.WriteLine("ReportViewer - GroupHeaderRendering :");
// BaseGroupedRow v = ghea.GroupHeader;
// v.BackColor = System.Drawing.Color.Red;
}
//testcode to handle sectionrenderevent
private void GroupFooterRendering ( object sender, GroupFooterEventArgs gfea)
{
// Console.WriteLine();
Console.WriteLine("ReportViewer - GroupFooterRendering :");
// var v = gfea.GroupFooter;
// v.BackColor = System.Drawing.Color.Red;
// BaseTextItem i = (BaseTextItem)v.Items[0];
// i.Text ="neuer text";
}
/*
private void PushPrinting (object sender,SectionRenderEventArgs e)
private void RowRendering (object sender,RowRenderEventArgs rrea)
{
switch (e.CurrentSection) {
case GlobalEnums.ReportSection.ReportHeader:
break;
case GlobalEnums.ReportSection.ReportPageHeader:
break;
case GlobalEnums.ReportSection.ReportDetail:
BaseRowItem ri = e.Section.Items[0] as BaseRowItem;
if (ri != null) {
BaseDataItem r = (BaseDataItem)ri.Items.Find("Kategoriename");
if (r != null) {
r.DBValue = "xxxxxxx";
}
}
break;
case GlobalEnums.ReportSection.ReportPageFooter:
break;
case GlobalEnums.ReportSection.ReportFooter:
break;
default:
break;
}
}
*/
Console.WriteLine("ReportViewer - RowRendering :");
}
#endregion

20
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs

@ -75,13 +75,13 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests @@ -75,13 +75,13 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
Is.EqualTo("2"));
}
[Test]
[ExpectedException(typeof(FieldNotFoundException))]
public void Throw_On_Unknown_Field ()
{
const string expression = "=count(unknown)";
Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo(this.testTable.Rows.Count.ToString()));
}
// [Test]
// [ExpectedException(typeof(FieldNotFoundException))]
// public void Throw_On_Unknown_Field ()
// {
// const string expression = "=count(unknown)";
// Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo(expression));
// }
#endregion
@ -127,11 +127,11 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests @@ -127,11 +127,11 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
[Test]
[ExpectedException(typeof(FieldNotFoundException))]
public void Throw_On_UnknownField ()
public void UnknownField_ErrorMessage ()
{
const string expression = "=max(Unknown)";
Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo(this.testTable.Rows.Count.ToString()));
string s = this.evaluator.Evaluate(expression);
Assert.That(s.Contains("not found"));
}
#endregion

14
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFromIListFixture.cs

@ -69,11 +69,11 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests @@ -69,11 +69,11 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
}
[Test]
[ExpectedException(typeof(FieldNotFoundException))]
public void Throw_On_Unknown_Field ()
public void Unknown_Field_ErrorMessage ()
{
const string expression = "=count(unknown)";
Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo(this.aggregateCollection.Count));
string s = this.evaluator.Evaluate(expression);
Assert.That(s.Contains("not found"));
}
#endregion
@ -121,14 +121,6 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests @@ -121,14 +121,6 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
}
[Test]
[ExpectedException(typeof(FieldNotFoundException))]
public void Throw_On_UnknownField ()
{
const string expression = "=max(Unknown)";
Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo(this.aggregateCollection.Count.ToString()));
}
#endregion

8
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/GlobalFunctions.cs

@ -96,11 +96,12 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests @@ -96,11 +96,12 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
[Test]
[ExpectedException(typeof(UnknownFunctionException))]
public void Throw_On_UnknownFunction()
public void UnknownFunction_ErrorMessage()
{
const string expression = "=TotalWrongFunction()";
Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo(this.singlePage.TotalPages.ToString()));
string s = this.evaluator.Evaluate(expression);
Assert.That(s.Contains("TotalWrongFunction"));
}
@ -109,7 +110,6 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests @@ -109,7 +110,6 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
{
this.singlePage = TestHelper.CreateSinglePage();
this.evaluator = new ExpressionEvaluatorFacade(this.singlePage);
// this.evaluator.SinglePage = this.singlePage;
}
}
}

Loading…
Cancel
Save