Browse Source

Merge branch 'reports'

pull/2/head
Daniel Grunwald 15 years ago
parent
commit
aee94877ff
  1. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/InternalReportLoader.cs
  2. 69
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportDesignerView.cs
  3. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs
  4. 12
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs
  5. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseTextItem.cs
  6. 75
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs
  7. 43
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs
  8. 58
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs
  9. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/ICSharpCode.Reports.Addin.Test.csproj
  10. 5
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenerateListWithGroupFixture.cs
  11. 127
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenertaeTableWithgroupFixture.cs
  12. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj
  13. 14
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/Layouter.cs
  14. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs
  15. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs
  16. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupedRow.cs
  17. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs
  18. 6
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/Graphics/BaseImageItem.cs
  19. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataManager.cs
  20. 34
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs
  21. 8
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs
  22. 80
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs
  23. 83
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs
  24. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/ConverterFactory.cs
  25. 143
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs
  26. 203
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs
  27. 118
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs
  28. 17
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs
  29. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs
  30. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/ReportingService/FieldReference.cs
  31. 7
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Globals/GlobalValues.cs
  32. 19
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs
  33. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractDataRenderer.cs
  34. 17
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs
  35. 230
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderTable.cs
  36. 38
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RendererFactory.cs
  37. 10
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs
  38. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/TestHelper.cs

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/InternalReportLoader.cs

@ -40,7 +40,7 @@ namespace ICSharpCode.Reports.Addin @@ -40,7 +40,7 @@ namespace ICSharpCode.Reports.Addin
{
Application.UseWaitCursor = true;
Application.DoEvents();
// Application.DoEvents();
try {
IComponent cc = this.host.CreateComponent(typeof(ICSharpCode.Reports.Addin.Designer.RootReportModel),"RootReportModel");
ICSharpCode.Reports.Addin.Designer.RootReportModel rootControl = cc as ICSharpCode.Reports.Addin.Designer.RootReportModel;

69
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportDesignerView.cs

@ -165,10 +165,7 @@ namespace ICSharpCode.Reports.Addin @@ -165,10 +165,7 @@ namespace ICSharpCode.Reports.Addin
void DesignerLoading(object sender, EventArgs e)
{
LoggingService.Debug("Forms designer: DesignerLoader loading...");
// this.reloadPending = false;
this.unloading = false;
// this.UserContent = this.pleaseWaitLabel;
Application.DoEvents();
}
@ -176,12 +173,10 @@ namespace ICSharpCode.Reports.Addin @@ -176,12 +173,10 @@ namespace ICSharpCode.Reports.Addin
{
// This method is called when the designer has loaded.
LoggingService.Debug("Report designer: DesignerLoader loaded, HasSucceeded=" + e.HasSucceeded.ToString());
// this.reloadPending = false;
this.unloading = false;
if (e.HasSucceeded) {
// CreatePanel();
SetupDesignSurface();
this.IsFormsDesignerVisible = true;
generator.MergeFormChanges(null);
@ -250,6 +245,7 @@ namespace ICSharpCode.Reports.Addin @@ -250,6 +245,7 @@ namespace ICSharpCode.Reports.Addin
}
#endregion
private void MergeFormChanges()
{
System.Diagnostics.Trace.WriteLine("View:MergeFormChanges()");
@ -305,7 +301,6 @@ namespace ICSharpCode.Reports.Addin @@ -305,7 +301,6 @@ namespace ICSharpCode.Reports.Addin
#endregion
#region SelectionService
private void SelectionChangedHandler(object sender, EventArgs args)
@ -383,67 +378,6 @@ namespace ICSharpCode.Reports.Addin @@ -383,67 +378,6 @@ namespace ICSharpCode.Reports.Addin
#region unload Designer
/*
void UnloadDesigner()
{
LoggingService.Debug("FormsDesigner unloading, setting ActiveDesignSurface to null");
designSurfaceManager.ActiveDesignSurface = null;
bool savedIsDirty = (this.DesignerCodeFile == null) ? false : this.DesignerCodeFile.IsDirty;
this.UserContent = this.pleaseWaitLabel;
Application.DoEvents();
if (this.DesignerCodeFile != null) {
this.DesignerCodeFile.IsDirty = savedIsDirty;
}
// We cannot dispose the design surface now because of SD2-451:
// When the switch to the source view was triggered by a double-click on an event
// in the PropertyPad, "InvalidOperationException: The container cannot be disposed
// at design time" is thrown.
// This is solved by calling dispose after the double-click event has been processed.
if (designSurface != null) {
designSurface.Loading -= this.DesignerLoading;
designSurface.Loaded -= this.DesignerLoaded;
designSurface.Flushed -= this.DesignerFlushed;
designSurface.Unloading -= this.DesingerUnloading;
IComponentChangeService componentChangeService = designSurface.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
if (componentChangeService != null) {
componentChangeService.ComponentChanged -= ComponentChanged;
componentChangeService.ComponentAdded -= ComponentListChanged;
componentChangeService.ComponentRemoved -= ComponentListChanged;
componentChangeService.ComponentRename -= ComponentListChanged;
}
if (this.Host != null) {
this.Host.TransactionClosed -= TransactionClose;
}
ISelectionService selectionService = designSurface.GetService(typeof(ISelectionService)) as ISelectionService;
if (selectionService != null) {
selectionService.SelectionChanged -= SelectionChangedHandler;
}
if (disposing) {
designSurface.Dispose();
} else {
WorkbenchSingleton.SafeThreadAsyncCall(designSurface.Dispose);
}
designSurface = null;
}
this.typeResolutionService = null;
this.loader = null;
foreach (KeyValuePair<Type, TypeDescriptionProvider> entry in this.addedTypeDescriptionProviders) {
TypeDescriptor.RemoveProvider(entry.Value, entry.Key);
}
this.addedTypeDescriptionProviders.Clear();
}
*/
#endregion
#region HasPropertyContainer implementation
private void UpdatePropertyPad()
@ -482,6 +416,7 @@ namespace ICSharpCode.Reports.Addin @@ -482,6 +416,7 @@ namespace ICSharpCode.Reports.Addin
#endregion
#region IUnDohandler
#endregion

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

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

12
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs

@ -22,7 +22,8 @@ namespace ICSharpCode.Reports.Addin @@ -22,7 +22,8 @@ namespace ICSharpCode.Reports.Addin
TypeDescriptor.AddProvider(new GroupedRowTypeProvider(), typeof(BaseGroupedRow));
}
[Category("Behavior")]
public bool PageBreakOnGroupChange {get;set;}
}
@ -78,16 +79,17 @@ namespace ICSharpCode.Reports.Addin @@ -78,16 +79,17 @@ namespace ICSharpCode.Reports.Addin
prop = props.Find("Controls",true);
allProperties.Add(prop);
/*
prop = props.Find("Padding",true);
allProperties.Add(prop);
*/
prop = props.Find("AlternateBackColor",true);
allProperties.Add(prop);
prop = props.Find("ChangeBackColorEveryNRow",true);
allProperties.Add(prop);
prop = props.Find("PageBreakOnGroupChange",true);
allProperties.Add(prop);
return new PropertyDescriptorCollection(allProperties.ToArray());
}
}

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseTextItem.cs

@ -85,9 +85,7 @@ namespace ICSharpCode.Reports.Addin @@ -85,9 +85,7 @@ namespace ICSharpCode.Reports.Addin
[Browsable(true),
Category("Appearance"),
Description("String to format Number's Date's etc")]
[DefaultValue("entry1")]
[TypeConverter(typeof(FormatStringConverter))]
public string FormatString {

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

@ -15,8 +15,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -15,8 +15,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
public class AbstractLayout
{
ISimpleContainer parentItem;
public AbstractLayout(ReportModel reportModel)
{
if (reportModel == null) {
@ -35,10 +33,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -35,10 +33,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
this.ReportModel.ReportHeader.Items.Add(textItem);
}
public virtual void SetParent (ISimpleContainer parentItem)
{
this.parentItem = parentItem;
}
public virtual void CreatePageHeader ()
{
@ -84,7 +78,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -84,7 +78,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
}
protected static void AdjustContainer (ICSharpCode.Reports.Core.BaseReportItem parent,
protected static void AdjustContainer (ISimpleContainer parent,
ICSharpCode.Reports.Core.BaseReportItem item)
{
item.Size = new Size (parent.Size.Width - GlobalValues.ControlMargins.Left - GlobalValues.ControlMargins.Right,
@ -92,25 +86,26 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -92,25 +86,26 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
item.Location = new Point(GlobalValues.ControlMargins.Left,
GlobalValues.ControlMargins.Top);
item.Parent = parent;
item.Parent = parent as BaseReportItem;
}
#region HeaderColumns
protected static ICSharpCode.Reports.Core.BaseRowItem CreateRowWithTextColumns(BaseReportItem parent,ReportItemCollection items)
protected static ICSharpCode.Reports.Core.BaseRowItem CreateRowWithTextColumns(ISimpleContainer parent,ReportItemCollection items)
{
ReportItemCollection colDetail = AbstractLayout.HeaderColumnsFromReportItems(items);
ICSharpCode.Reports.Core.BaseRowItem row = new ICSharpCode.Reports.Core.BaseRowItem();
AdjustContainer(parent,row);
int defY = parent.Location.Y + GlobalValues.ControlMargins.Top;
int defX = row.Size.Width / colDetail.Count;
int defY = GlobalValues.ControlMargins.Top;
int ctrlWidth = CalculateControlWidth(row,colDetail);
int startX = parent.Location.X + GlobalValues.ControlMargins.Left;
foreach (ICSharpCode.Reports.Core.BaseTextItem ir in colDetail) {
Point np = new Point(startX,defY);
startX += defX;
startX += ctrlWidth;
ir.Location = np;
ir.Parent = row;
row.Items.Add(ir);
@ -119,6 +114,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -119,6 +114,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
}
private static ReportItemCollection HeaderColumnsFromReportItems(ReportItemCollection reportItemCollection)
{
if (reportItemCollection == null) {
@ -139,43 +135,56 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -139,43 +135,56 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
#endregion
protected static void AddItemsToSection (ICSharpCode.Reports.Core.BaseSection section,ReportItemCollection items)
protected ReportItemCollection AddItemsToContainer (ReportItemCollection items)
{
int defY = section.Location.Y + GlobalValues.ControlMargins.Top;
int defX = section.Size.Width / items.Count;
int startX = section.Location.X + GlobalValues.ControlMargins.Left;
int locationX = GlobalValues.ControlMargins.Left;
var minCtrlWidth = CalculateControlWidth(ParentItem,items);
var col = new ReportItemCollection();
foreach (var ir in items) {
Point np = new Point(startX,defY);
startX += defX;
ir.Location = np;
section.Items.Add(ir);
ir.Location = new Point(locationX,GlobalValues.ControlMargins.Top);
col.Add(ir);
locationX += minCtrlWidth;
}
return col;
}
protected void AddItemsToContainer (ICSharpCode.Reports.Core.BaseSection section,ReportItemCollection items)
protected static int CalculateControlWidth(ISimpleContainer row, ReportItemCollection colDetail)
{
section.Items.Add(this.parentItem as BaseReportItem);
int locationY = 10;
int locationX = this.parentItem.Location.X + GlobalValues.ControlMargins.Left;
int minCtrlWidth = this.parentItem.Size.Width / items.Count;
return row.Size.Width / colDetail.Count;
}
foreach (var ir in items) {
ir.Location = new Point(locationX,locationY);
this.parentItem.Items.Add(ir);
locationX += minCtrlWidth;
}
#region Grouping
protected ICSharpCode.Reports.Core.BaseGroupedRow CreateGroupHeader(Point headerLocation)
{
ICSharpCode.Reports.Core.BaseDataItem dataItem = new ICSharpCode.Reports.Core.BaseDataItem();
dataItem.ColumnName = ReportModel.ReportSettings.GroupColumnsCollection[0].ColumnName;
dataItem.DataType = ReportModel.ReportSettings.GroupColumnsCollection[0].DataTypeName;
dataItem.Location = new Point (GlobalValues.ControlMargins.Left,GlobalValues.ControlMargins.Top);
dataItem.Size = new Size (150,20);
dataItem.Text = ReportModel.ReportSettings.GroupColumnsCollection[0].ColumnName;
ICSharpCode.Reports.Core.BaseGroupedRow groupHeader = new ICSharpCode.Reports.Core.BaseGroupedRow();
groupHeader.Location = headerLocation;
groupHeader.Size = new Size (300,dataItem.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
groupHeader.Items.Add(dataItem);
return groupHeader;
}
#endregion
protected ReportModel ReportModel {get; private set;}
protected ISimpleContainer ParentItem {
get { return parentItem; }
}
protected ISimpleContainer ParentItem {get;set;}
}
}

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

@ -23,7 +23,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -23,7 +23,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
this.reportItems = reportItemCollection;
ICSharpCode.Reports.Core.BaseRowItem row = new ICSharpCode.Reports.Core.BaseRowItem();
AdjustContainer(base.ReportModel.DetailSection,row);
base.SetParent(row);
base.ParentItem = row;
}
@ -35,6 +35,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -35,6 +35,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
base.CreatePageHeader();
ICSharpCode.Reports.Core.BaseRowItem row = CreateRowWithTextColumns(base.ReportModel.PageHeader,
this.reportItems);
AdjustContainer(ParentItem,row);
base.ReportModel.PageHeader.Items.Add(row);
}
@ -45,38 +46,22 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -45,38 +46,22 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
throw new ArgumentNullException("section");
}
if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) {
InsertGroupHeader();
ParentItem.Location = new Point(ParentItem.Location.X,50);
ParentItem.Size = new Size(ParentItem.Size.Width,40);
section.Size = new Size(section.Size.Width,100);
}
if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0)
{
if (base.ParentItem != null) {
base.AddItemsToContainer(base.ReportModel.DetailSection,this.reportItems);
ParentItem.Size = new Size(ParentItem.Size.Width,40);
}
else{
AddItemsToSection (base.ReportModel.DetailSection,this.reportItems);
}
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);
}
private void InsertGroupHeader()
{
ICSharpCode.Reports.Core.BaseDataItem dataItem = new ICSharpCode.Reports.Core.BaseDataItem();
dataItem.ColumnName = base.ReportModel.ReportSettings.GroupColumnsCollection[0].ColumnName;
dataItem.DataType = base.ReportModel.ReportSettings.GroupColumnsCollection[0].DataTypeName;
dataItem.Location = new Point (10,5);
dataItem.Size = new Size (150,20);
dataItem.Text = base.ReportModel.ReportSettings.GroupColumnsCollection[0].ColumnName;
ICSharpCode.Reports.Core.BaseGroupedRow groupHeader = new ICSharpCode.Reports.Core.BaseGroupedRow();
groupHeader.Location = new Point(5,10);
groupHeader.Size = new Size (300,30);
groupHeader.Items.Add(dataItem);
base.ReportModel.DetailSection.Items.Add(groupHeader);
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);
}
#endregion

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

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
using System;
using System.Drawing;
using ICSharpCode.Reports.Core;
using ICSharpCode.Reports.Core.Interfaces;
namespace ICSharpCode.Reports.Addin.ReportWizard
{
@ -22,7 +23,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -22,7 +23,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
}
public override void CreatePageHeader()
{
base.CreatePageHeader();
@ -40,39 +40,61 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -40,39 +40,61 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
ICSharpCode.Reports.Core.BaseTableItem table = new ICSharpCode.Reports.Core.BaseTableItem();
table.Name = "Table1";
AdjustContainer(base.ReportModel.DetailSection,table);
base.ReportModel.DetailSection.Items.Add(table);
base.ParentItem = table;
ICSharpCode.Reports.Core.BaseRowItem r1 = CreateRowWithTextColumns(table,
this.reportItems);
ICSharpCode.Reports.Core.BaseRowItem headerRow = CreateRowWithTextColumns(ParentItem, this.reportItems);
ParentItem.Items.Add (headerRow);
Point insertLocation = new Point (margin.Left,headerRow.Location.Y + headerRow.Size.Height + margin.Bottom + margin.Top);
ICSharpCode.Reports.Core.BaseRowItem r2 = new ICSharpCode.Reports.Core.BaseRowItem();
AdjustContainer (table,r2);
if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) {
var groupHeader = base.CreateGroupHeader(insertLocation);
ParentItem.Items.Add(groupHeader);
insertLocation = new Point(margin.Left,insertLocation.Y + groupHeader.Size.Height + margin.Bottom + margin.Top);
}
//Insert details allways
r2.Location = new Point (margin.Left,
r1.Location.Y + r1.Size.Height + margin.Bottom + margin.Top);
ICSharpCode.Reports.Core.BaseRowItem detailRow = new ICSharpCode.Reports.Core.BaseRowItem();
AdjustContainer (ParentItem,detailRow);
int defX = r2.Size.Width / this.reportItems.Count;
detailRow.Location = insertLocation;
detailRow.Size = new Size(detailRow.Size.Width,30);
int startX = r2.Location.X + margin.Left;
int defX = AbstractLayout.CalculateControlWidth(detailRow,reportItems);
int startX = margin.Left;
foreach (ICSharpCode.Reports.Core.BaseReportItem ir in this.reportItems)
{
Point np = new Point(startX,margin.Top);
startX += defX;
ir.Location = np;
ir.Parent = r2;
r2.Items.Add(ir);
ir.Parent = detailRow;
detailRow.Items.Add(ir);
}
table.Size = new Size (table.Size.Width,
margin.Top + r1.Size.Height + margin.Bottom + r2.Size.Height + margin.Bottom);
section.Size = new Size (section.Size.Width,table.Size.Height + margin.Top + margin.Bottom);
table.Items.Add (r1);
table.Items.Add (r2);
base.ReportModel.DetailSection.Items.Add(table);
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)
{
int h = GlobalValues.ControlMargins.Top;
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);
}
}
}

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

@ -70,6 +70,7 @@ @@ -70,6 +70,7 @@
<Compile Include="Wizard\Generators\GeneratePlainReportFixture_2.cs" />
<Compile Include="Wizard\Generators\GenerateTableReportFixture.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>

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

@ -99,7 +99,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -99,7 +99,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
{
// TODO: Add tear down code.
}
/*
private static ReportModel CreateModel (string reportName)
{
@ -120,6 +120,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -120,6 +120,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
customizer.Set("Generator", structure);
customizer.Set("ReportLayout",GlobalEnums.ReportLayout.ListLayout);
IReportGenerator generator = new GeneratePushDataReport(m,customizer);
generator.GenerateReport();
@ -136,7 +137,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -136,7 +137,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
return model;
}
*/
private static ReportStructure CreateReportStructure (string reportName)
{
ReportStructure structure = new ReportStructure();

127
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenertaeTableWithgroupFixture.cs

@ -0,0 +1,127 @@ @@ -0,0 +1,127 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 03.10.2010
* Time: 17:26
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using ICSharpCode.Reports.Addin.ReportWizard;
using ICSharpCode.Reports.Core;
using NUnit.Framework;
namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
{
[TestFixture]
public class GenertaeTableWithGroupFixture
{
private const string reportName = "TableBasedReport";
private ReportModel reportModel;
[Test]
public void PageDetail_First_Item_Should_Table()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
var item = s.Items[0];
Assert.That(item,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseTableItem)));
}
[Test]
public void Table_Should_Contain_Three_Rows()
{
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));
}
[Test]
public void Table_FirstItem_Should_Row ()
{
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)));
}
[Test]
public void Table_SecondItem_Should_GroupRow ()
{
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)));
}
#region setup / TearDown
[TestFixtureSetUp]
public void Init()
{
this.reportModel = CreateModel(reportName);
}
[TestFixtureTearDown]
public void Dispose()
{
// 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.TableLayout);
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();
structure.ReportName = reportName;
structure.DataModel = GlobalEnums.PushPullModel.PushData;
structure.ReportType = GlobalEnums.ReportType.DataReport;
return structure;
}
#endregion
}
}

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

@ -138,12 +138,12 @@ @@ -138,12 +138,12 @@
<Compile Include="Project\Exceptions\UnknownItemException.cs" />
<Compile Include="Project\Exceptions\WrongColumnException.cs" />
<Compile Include="Project\Exceptions\WrongSectionException.cs" />
<Compile Include="Project\Exporter\Converters\GroupedTableConverter.cs" />
<Compile Include="Project\Expressions\SimpleExpressionEvaluator\Compilation\Functions\ReportingService\FieldReference.cs" />
<Compile Include="Project\Exporter\BasePager.cs" />
<Compile Include="Project\Exporter\Converters\BaseConverter.cs" />
<Compile Include="Project\Exporter\Converters\ConverterFactory.cs" />
<Compile Include="Project\Exporter\Converters\GroupedRowConverter.cs" />
<Compile Include="Project\Exporter\Converters\TableConverter.cs" />
<Compile Include="Project\Exporter\Decorators\IBaseStyleDecorator.cs" />
<Compile Include="Project\Exporter\Decorators\ILineDecorator.cs" />
<Compile Include="Project\Exporter\Decorators\Linedecorator.cs" />
@ -272,7 +272,9 @@ @@ -272,7 +272,9 @@
<Compile Include="Project\Printing\Graphics\RectangleShape.cs" />
<Compile Include="Project\Printing\AbstractRenderer.cs" />
<Compile Include="Project\Printing\RenderDataReport.cs" />
<Compile Include="Project\Printing\RendererFactory.cs" />
<Compile Include="Project\Printing\RenderFormSheetReport.cs" />
<Compile Include="Project\Printing\RenderTable.cs" />
<Compile Include="Project\Printing\ReportDocument.cs">
<SubType>Component</SubType>
</Compile>

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

@ -39,17 +39,12 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -39,17 +39,12 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
System.Collections.Generic.IEnumerable<BaseReportItem> canGrowShrinkCollection = from bt in container.Items where bt.CanGrow == true select bt;
if (canGrowShrinkCollection.Count() > 0 ) {
int bottomPadding = container.Size.Height - (container.Items[0].Location.Y + container.Items[0].Size.Height);
Rectangle surroundingRec = FindSurroundingRectangle(graphics,canGrowShrinkCollection);
desiredContainerRectangle = new Rectangle(container.Location.X,
container.Location.Y,
container.Size.Width,
surroundingRec.Size.Height + bottomPadding );
surroundingRec.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
}
return desiredContainerRectangle;
}
@ -63,6 +58,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -63,6 +58,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
throw new ArgumentNullException("section");
}
Console.WriteLine("layouter for {0}",section.Name);
IEnumerable<BaseReportItem> canGrowShrinkCollection = from bt in section.Items where bt.CanGrow == true select bt;
@ -73,17 +69,13 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -73,17 +69,13 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
if (canGrowShrinkCollection.Count() > 0) {
//Console.WriteLine ("xx layout section");
int bottomPadding = section.Size.Height - (section.Items[0].Size.Height + section.Items[0].Location.Y);
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 + bottomPadding);
surroundingRec.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom );
}
}
return desiredSectionRectangle;

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs

@ -25,7 +25,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -25,7 +25,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
{
Rectangle textRect = layouter.Layout(graphics,row);
if (textRect.Height > row.Size.Height) {
row.Size = new Size(row.Size.Width,textRect.Height);
row.Size = new Size(row.Size.Width,textRect.Height + 5);
}
}

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

@ -265,8 +265,8 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -265,8 +265,8 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
textItem.Text = evaluator.Evaluate(textItem.Text);
}
}
} catch (Exception e) {
throw e;
} catch (Exception) {
throw ;
}
}

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupedRow.cs

@ -12,7 +12,8 @@ namespace ICSharpCode.Reports.Core @@ -12,7 +12,8 @@ namespace ICSharpCode.Reports.Core
{
public BaseGroupedRow():base()
{
Console.WriteLine("Constr baseGroupedrow");
}
public bool PageBreakOnGroupChange {get;set;}
}
}

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

@ -16,7 +16,8 @@ using ICSharpCode.Reports.Core.Interfaces; @@ -16,7 +16,8 @@ using ICSharpCode.Reports.Core.Interfaces;
namespace ICSharpCode.Reports.Core
{
public class BaseSection : BaseReportItem {
public class BaseSection : BaseReportItem,ISimpleContainer
{
private bool pageBreakAfter;
private ReportItemCollection items;

6
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/Graphics/BaseImageItem.cs

@ -171,11 +171,7 @@ namespace ICSharpCode.Reports.Core { @@ -171,11 +171,7 @@ namespace ICSharpCode.Reports.Core {
}
public string DBValue {
get{throw new NotImplementedException();}
set{throw new NotImplementedException();}
}
public string DBValue {get;set;}
public virtual string ImageFileName

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

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

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

@ -43,9 +43,10 @@ namespace ICSharpCode.Reports.Core @@ -43,9 +43,10 @@ namespace ICSharpCode.Reports.Core
}
public bool HasMoreData {
public bool HasMoreData
{
get {
if (this.CurrentRow < this.Count -1 ){
if (this.CurrentRow < store.IndexList.Count -1 ){
return true;
} else {
return false;
@ -64,6 +65,7 @@ namespace ICSharpCode.Reports.Core @@ -64,6 +65,7 @@ namespace ICSharpCode.Reports.Core
public bool IsSorted {get {return this.store.IsSorted;}}
public bool IsGrouped {get {return this.store.IsGrouped;}}
@ -107,33 +109,6 @@ namespace ICSharpCode.Reports.Core @@ -107,33 +109,6 @@ namespace ICSharpCode.Reports.Core
}
/*
public int ChildListCount
{
get {
return BuildChildList().Count;
}
}
*/
// at the moment only tables are working
/*
public void FillChild (ReportItemCollection collection)
{
TableStrategy tableStrategy = store as TableStrategy;
foreach (var item in collection) {
IDataItem dataItem = item as IDataItem;
if (dataItem != null) {
CurrentItemsCollection currentItemsCollection = tableStrategy.FillDataRow(ce.Current.ListIndex);
CurrentItem s = currentItemsCollection.FirstOrDefault(x => x.ColumnName == dataItem.ColumnName);
dataItem.DBValue = s.Value.ToString();
}
}
}
*/
private IndexList BuildChildList()
{
@ -147,6 +122,7 @@ namespace ICSharpCode.Reports.Core @@ -147,6 +122,7 @@ namespace ICSharpCode.Reports.Core
#endregion
#region Try make recursive with ChildNavigavtor
public IDataNavigator GetChildNavigator()

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

@ -99,10 +99,10 @@ namespace ICSharpCode.Reports.Core @@ -99,10 +99,10 @@ namespace ICSharpCode.Reports.Core
public override void Group ()
{
base.Group();
IndexList gl = new IndexList("group");
gl = this.BuildSortIndex (ReportSettings.GroupColumnsCollection);
ShowIndexList(gl);
BuildGroup(gl);
IndexList sortedIndexList = new IndexList("group");
sortedIndexList = this.BuildSortIndex (ReportSettings.GroupColumnsCollection);
ShowIndexList(sortedIndexList);
BuildGroup(sortedIndexList);
}

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

@ -15,11 +15,8 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -15,11 +15,8 @@ namespace ICSharpCode.Reports.Core.Exporter
/// </summary>
public class BasePager:IReportCreator
{
private ExporterPage singlePage;
private PagesCollection pages;
private IReportModel reportModel;
private Graphics graphics;
private bool pageFull;
private readonly object pageLock = new object();
private ILayouter layouter;
@ -36,9 +33,9 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -36,9 +33,9 @@ namespace ICSharpCode.Reports.Core.Exporter
if (layouter == null) {
throw new ArgumentNullException ("layouter");
}
this.reportModel = reportModel;
this.ReportModel = reportModel;
this.layouter = layouter;
this.graphics = CreateGraphicObject.FromSize(this.reportModel.ReportSettings.PageSize);
this.graphics = CreateGraphicObject.FromSize(this.ReportModel.ReportSettings.PageSize);
}
#endregion
@ -60,13 +57,13 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -60,13 +57,13 @@ namespace ICSharpCode.Reports.Core.Exporter
protected ExporterPage InitNewPage ()
{
bool firstPage;
this.ReportModel.ReportSettings.LeftMargin = this.reportModel.ReportSettings.LeftMargin;
this.ReportModel.ReportSettings.LeftMargin = this.ReportModel.ReportSettings.LeftMargin;
if (this.Pages.Count == 0) {
firstPage = true;
} else {
firstPage = false;
}
SectionBounds sectionBounds = new SectionBounds (this.reportModel.ReportSettings,firstPage);
SectionBounds sectionBounds = new SectionBounds (this.ReportModel.ReportSettings,firstPage);
ExporterPage sp = ExporterPage.CreateInstance(sectionBounds,this.pages.Count + 1);
return sp;
}
@ -74,10 +71,9 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -74,10 +71,9 @@ namespace ICSharpCode.Reports.Core.Exporter
protected virtual void BuildNewPage ()
{
this.singlePage = this.InitNewPage();
PrintHelper.InitPage(this.singlePage,this.reportModel.ReportSettings);
this.singlePage.CalculatePageBounds(this.ReportModel);
this.pageFull = false;
this.SinglePage = this.InitNewPage();
PrintHelper.InitPage(this.SinglePage,this.ReportModel.ReportSettings);
this.SinglePage.CalculatePageBounds(this.ReportModel);
}
#endregion
@ -94,10 +90,6 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -94,10 +90,6 @@ namespace ICSharpCode.Reports.Core.Exporter
ExporterCollection list = new ExporterCollection();
// if (section.DrawBorder == true) {
// section.Items.Insert(0,CreateDebugItem(section));
// }
if (section.Items.Count > 0) {
Point offset = new Point(section.Location.X,section.SectionOffset);
@ -123,7 +115,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -123,7 +115,7 @@ namespace ICSharpCode.Reports.Core.Exporter
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);
section.Size = new Size(section.Size.Width,desiredRectangle.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
}
list = StandardPrinter.ConvertPlainCollection(section.Items,offset);
@ -183,32 +175,27 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -183,32 +175,27 @@ namespace ICSharpCode.Reports.Core.Exporter
#endregion
protected void FinishRendering (IDataNavigator navigator)
#region After Converting, final step's
protected void FinishRendering (IDataNavigator dataNavigator)
{
if (this.Pages.Count == 0) {
return;
}
// set values known only end of reportcreation
foreach (ExporterPage p in this.pages)
{
p.TotalPages = this.Pages.Count;
}
this.singlePage.IDataNavigator = navigator;
IExpressionEvaluatorFacade evaluatorFacade = new ExpressionEvaluatorFacade(this.singlePage);
IExpressionEvaluatorFacade evaluatorFacade = new ExpressionEvaluatorFacade(this.SinglePage);
foreach (ExporterPage p in this.pages)
{
this.singlePage = p;
// evaluatorFacade.SinglePage = this.singlePage;
// evaluatorFacade.SinglePage.IDataNavigator = navigator;
p.TotalPages = this.Pages.Count;
p.IDataNavigator = dataNavigator;
evaluatorFacade.SinglePage = p;
EvaluateRecursive(evaluatorFacade,p.Items);
}
}
private void EvaluateRecursive (IExpressionEvaluatorFacade evaluatorFassade,ExporterCollection items)
private static void EvaluateRecursive (IExpressionEvaluatorFacade evaluatorFassade,ExporterCollection items)
{
foreach (BaseExportColumn be in items) {
@ -222,6 +209,10 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -222,6 +209,10 @@ 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));
}
et.Text = evaluatorFassade.Evaluate(et.Text);
}
catch (UnknownFunctionException ufe)
@ -232,11 +223,12 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -232,11 +223,12 @@ namespace ICSharpCode.Reports.Core.Exporter
{
}
}
}
}
#endregion
#region Event's
@ -272,19 +264,9 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -272,19 +264,9 @@ namespace ICSharpCode.Reports.Core.Exporter
get { return layouter; }
}
public IReportModel ReportModel
{
get { return reportModel; }
set { reportModel = value; }
}
protected ExporterPage SinglePage
{
get { return singlePage; }
set { singlePage = value; }
}
public IReportModel ReportModel {get;set;}
protected ExporterPage SinglePage {get;set;}
public PagesCollection Pages
{
@ -301,16 +283,16 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -301,16 +283,16 @@ namespace ICSharpCode.Reports.Core.Exporter
protected SectionBounds SectionBounds
{
get { return singlePage.SectionBounds; }
get { return SinglePage.SectionBounds; }
}
protected bool PageFull
{
get { return pageFull; }
set { pageFull = value; }
}
// protected bool PageFull
// {
// get { return pageFull; }
// set { pageFull = value; }
// }
//
#endregion
}

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

@ -2,7 +2,10 @@ @@ -2,7 +2,10 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.ObjectModel;
using System.Drawing;
using System.Linq;
using ICSharpCode.Reports.Core.BaseClasses;
using ICSharpCode.Reports.Core.BaseClasses.Printing;
using ICSharpCode.Reports.Core.Events;
@ -53,7 +56,6 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -53,7 +56,6 @@ namespace ICSharpCode.Reports.Core.Exporter
}
#region PageBreak
protected void BuildNewPage(ExporterCollection myList,BaseSection section)
@ -69,6 +71,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -69,6 +71,7 @@ namespace ICSharpCode.Reports.Core.Exporter
EventHelper.Raise<NewPageEventArgs>(PageFull,this,new NewPageEventArgs(items));
}
#endregion
@ -105,6 +108,41 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -105,6 +108,41 @@ namespace ICSharpCode.Reports.Core.Exporter
}
#region Grouping
protected Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition)
{
PrepareContainerForConverting(section,simpleContainer);
Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
AfterConverting (section,mylist);
return curPos;
}
protected bool PageBreakAfterGroupChange(ISimpleContainer container)
{
var groupedRows = BaseConverter.FindGroups(container);
if (groupedRows.Count > 0) {
var groupedRow = groupedRows[0];
return groupedRow.PageBreakOnGroupChange;
}
return false;
}
protected static Collection<BaseGroupedRow> FindGroups (ISimpleContainer container)
{
return new Collection<BaseGroupedRow>(container.Items.OfType<BaseGroupedRow>().ToList());
}
protected virtual Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section)
{
BuildNewPage(exporterCollection,section);
return Point.Empty;
}
#endregion
#region IBaseConverter
@ -114,16 +152,19 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -114,16 +152,19 @@ namespace ICSharpCode.Reports.Core.Exporter
return new ExporterCollection();;
}
public Point CurrentPosition {get;set;}
#endregion
public Rectangle ParentRectangle {
get { return parentRectangle; }
}
public ExporterPage SinglePage {
public ISinglePage SinglePage {
get { return singlePage; }
}
public SectionBounds SectionBounds {
get { return sectionBounds; }
}
@ -138,9 +179,10 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -138,9 +179,10 @@ namespace ICSharpCode.Reports.Core.Exporter
}
public Graphics Graphics {get;set;}
#endregion
protected void SaveSize(Size size)
protected void SaveSectionSize(Size size)
{
this.saveSize = size;
}
@ -158,13 +200,6 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -158,13 +200,6 @@ namespace ICSharpCode.Reports.Core.Exporter
}
protected void FillRow (ISimpleContainer row)
{
DataNavigator.Fill(row.Items);
}
protected void PrepareContainerForConverting(BaseSection section,ISimpleContainer simpleContainer)
{
if (section != null) {
@ -174,9 +209,19 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -174,9 +209,19 @@ namespace ICSharpCode.Reports.Core.Exporter
}
private void LayoutRow (ISimpleContainer row)
protected void AfterConverting (BaseSection section,ExporterCollection convertedList)
{
PrintHelper.SetLayoutForRow(Graphics,Layouter,row);
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;
}
@ -186,5 +231,17 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -186,5 +231,17 @@ namespace ICSharpCode.Reports.Core.Exporter
myList.AddRange(ml);
return new Point (leftPos,curPos.Y + container.Size.Height + (3 *GlobalValues.GapBetweenContainer));
}
private void FillRow (ISimpleContainer row)
{
DataNavigator.Fill(row.Items);
}
private void LayoutRow (ISimpleContainer row)
{
PrintHelper.SetLayoutForRow(Graphics,Layouter,row);
}
}
}

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/ConverterFactory.cs

@ -21,7 +21,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -21,7 +21,7 @@ namespace ICSharpCode.Reports.Core.Exporter
Type t = itemToConvert.GetType();
if (t.Equals(typeof(BaseTableItem))) {
return new TableConverter(dataNavigator,singlePage,layouter);
return new GroupedTableConverter(dataNavigator,singlePage,layouter);
}
if (t.Equals(typeof(BaseRowItem))) {

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

@ -2,11 +2,7 @@ @@ -2,11 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Drawing;
using System.Linq;
using ICSharpCode.Reports.Core.BaseClasses.Printing;
using ICSharpCode.Reports.Core.Interfaces;
@ -27,6 +23,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -27,6 +23,7 @@ namespace ICSharpCode.Reports.Core.Exporter
{
}
public override ExporterCollection Convert(BaseReportItem parent, BaseReportItem item)
{
if (parent == null) {
@ -58,68 +55,117 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -58,68 +55,117 @@ namespace ICSharpCode.Reports.Core.Exporter
private ExporterCollection ConvertDataRow (ISimpleContainer simpleContainer)
{
ExporterCollection exporterCollection = new ExporterCollection();
Point currentPosition = new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y);
base.CurrentPosition = new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y);
BaseSection section = parent as BaseSection;
int defaultLeftPos = 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);
PrintHelper.AdjustSectionLocation (section);
section.Size = this.SectionBounds.DetailSectionRectangle.Size;
base.SaveSize(section.Items[0].Size);
// did we have GroupedItems at all
if (section.Items.IsGrouped) {
if (section.Items.IsGrouped)
{
// GetType child navigator
IDataNavigator childNavigator = base.DataNavigator.GetChildNavigator();
base.Evaluator.SinglePage.IDataNavigator = childNavigator;
// Convert Grouping Header
currentPosition = ConvertGroupHeader(exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition);
base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,base.CurrentPosition);
section.Size = base.RestoreSize;
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;
section.Items[0].Size = groupSize;
section.Items[1].Size = childSize;
do {
childNavigator.Fill(simpleContainer.Items);
currentPosition = ConvertGroupChilds (exporterCollection,section,
simpleContainer,defaultLeftPos,currentPosition);
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],currentPosition);
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.BuildNewPage(exporterCollection,section);
currentPosition = CalculateStartPosition ();
base.CurrentPosition = ForcePageBreak (exporterCollection,section);
}
}
while ( childNavigator.MoveNext());
if (PageBreakAfterGroupChange(section) ) {
if ( base.DataNavigator.HasMoreData)
{
base.CurrentPosition = ForcePageBreak (exporterCollection,section);
}
}
base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator;
}
}
else
{
// No Grouping at all
currentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition);
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],currentPosition);
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],base.CurrentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) {
base.BuildNewPage(exporterCollection,section);
currentPosition = CalculateStartPosition();
base.CurrentPosition = ForcePageBreak (exporterCollection,section);
}
ShouldDrawBorder (section,exporterCollection);
}
while (base.DataNavigator.MoveNext());
@ -127,22 +173,30 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -127,22 +173,30 @@ namespace ICSharpCode.Reports.Core.Exporter
section.Location.Y + section.Size.Height,
SectionBounds.ReportFooterRectangle.Width,
SectionBounds.ReportFooterRectangle.Height);
return exporterCollection;
}
protected override Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section)
{
base.ForcePageBreak(exporterCollection,section);
return CalculateStartPosition();
}
private Point CalculateStartPosition()
{
return new Point(base.SectionBounds.PageHeaderRectangle.X,base.SectionBounds.PageHeaderRectangle.Y);
}
private Point ConvertGroupHeader(ExporterCollection mylist,BaseSection section,ISimpleContainer simpleContainer,int leftPos,Point offset)
private Point ConvertGroupHeader(ExporterCollection exportList,BaseSection section,int leftPos,Point offset)
{
Point retVal = Point.Empty;
var retVal = Point.Empty;
ReportItemCollection groupCollection = null;
var grh = new Collection<BaseGroupedRow>(section.Items.OfType<BaseGroupedRow>().ToList());
if (grh.Count == 0) {
var groupedRows = BaseConverter.FindGroups(section);
if (groupedRows.Count == 0) {
groupCollection = section.Items.ExtractGroupedColumns();
base.DataNavigator.Fill(groupCollection);
base.FireSectionRendering(section);
@ -150,45 +204,16 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -150,45 +204,16 @@ namespace ICSharpCode.Reports.Core.Exporter
StandardPrinter.EvaluateRow(base.Evaluator,list);
mylist.AddRange(list);
exportList.AddRange(list);
AfterConverting (section,list);
retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer));
} else {
retVal = ConvertStandardRow(mylist,section,grh[0],leftPos,offset);
retVal = ConvertStandardRow(exportList,section,groupedRows[0],leftPos,offset);
}
return retVal;
}
private Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition)
{
PrepareContainerForConverting(section,simpleContainer);
Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
AfterConverting (section,mylist);
return curPos;
}
private Point ConvertStandardRow(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition)
{
base.FillRow(simpleContainer);
PrepareContainerForConverting(section,simpleContainer);
Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
StandardPrinter.EvaluateRow(base.Evaluator,mylist);
AfterConverting (section,mylist);
return curPos;
}
private void AfterConverting (BaseSection section,ExporterCollection mylist)
{
StandardPrinter.EvaluateRow(base.Evaluator,mylist);
section.Items[0].Size = base.RestoreSize;
section.SectionOffset += section.Size.Height + 3 * GlobalValues.GapBetweenContainer;
}
private static void ShouldDrawBorder (BaseSection section,ExporterCollection list)
{
if (section.DrawBorder == true) {

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

@ -0,0 +1,203 @@ @@ -0,0 +1,203 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.ObjectModel;
using System.Drawing;
using System.Linq;
using ICSharpCode.Reports.Core.BaseClasses.Printing;
using ICSharpCode.Reports.Core.Interfaces;
namespace ICSharpCode.Reports.Core.Exporter
{
/// <summary>
/// Description of TableConverter.
/// </summary>
public class GroupedTableConverter:BaseConverter
{
private ITableContainer table;
public GroupedTableConverter(IDataNavigator dataNavigator,
ExporterPage singlePage, ILayouter layouter ):base(dataNavigator,singlePage,layouter)
{
}
public override ExporterCollection Convert (BaseReportItem parent,BaseReportItem item)
{
if (parent == null) {
throw new ArgumentNullException("parent");
}
if (item == null) {
throw new ArgumentNullException("item");
}
ExporterCollection mylist = base.Convert(parent,item);
this.table = (BaseTableItem)item ;
this.table.Parent = parent;
this.table.DataNavigator = base.DataNavigator;
return ConvertInternal(mylist);
}
private ExporterCollection ConvertInternal(ExporterCollection exporterCollection)
{
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;
Point dataAreaStart = new Point(table.Items[0].Location.X,table.Items[0].Location.Y + base.CurrentPosition.Y);
ISimpleContainer headerRow = null;
Rectangle pageBreakRect = Rectangle.Empty;
this.table.Items.SortByLocation();
// Header
var simpleContainer = table.Items[0] as ISimpleContainer;
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));
if (PrintHelper.IsTextOnlyRow(simpleContainer) ) {
headerRow = simpleContainer;
base.CurrentPosition = BaseConverter.BaseConvert(exporterCollection,headerRow,defaultLeftPos,base.CurrentPosition);
}
BaseGroupedRow row = table.Items[1] as BaseGroupedRow;
if (row != null) {
//grouped
do {
// GetType child navigator
IDataNavigator childNavigator = base.DataNavigator.GetChildNavigator();
base.Evaluator.SinglePage.IDataNavigator = childNavigator;
// Convert Grouping Header
base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,base.CurrentPosition);
childNavigator.Reset();
childNavigator.MoveNext();
//Convert children
if (childNavigator != null) {
do
{
StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor);
simpleContainer = table.Items[2] as ISimpleContainer;
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);
}
}
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);
}
}
base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator;
}
}
while (base.DataNavigator.MoveNext());
}
else
{
// No Grouping at all
base.SaveSectionSize(simpleContainer.Size);
simpleContainer = table.Items[1] as ISimpleContainer;
do {
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;
}
while (base.DataNavigator.MoveNext());
base.DataNavigator.Reset();
base.DataNavigator.MoveNext();
SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left,
base.CurrentPosition.Y,
SectionBounds.ReportFooterRectangle.Width,
SectionBounds.ReportFooterRectangle.Height);
}
}
return exporterCollection;
}
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)
{
var retVal = Point.Empty;
ReportItemCollection groupCollection = null;
var groupedRow = new Collection<BaseGroupedRow>(table.Items.OfType<BaseGroupedRow>().ToList());
if (groupedRow.Count == 0) {
groupCollection = section.Items.ExtractGroupedColumns();
base.DataNavigator.Fill(groupCollection);
base.FireSectionRendering(section);
ExporterCollection list = StandardPrinter.ConvertPlainCollection(groupCollection,offset);
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));
} else {
retVal = ConvertStandardRow(exportList,section,groupedRow[0],leftPos,offset);
}
return retVal;
}
}
}

118
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs

@ -1,118 +0,0 @@ @@ -1,118 +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.Drawing;
using ICSharpCode.Reports.Core.BaseClasses.Printing;
using ICSharpCode.Reports.Core.Interfaces;
namespace ICSharpCode.Reports.Core.Exporter
{
/// <summary>
/// Description of TableConverter.
/// </summary>
public class TableConverter:BaseConverter
{
private ITableContainer baseTable;
public TableConverter(IDataNavigator dataNavigator,
ExporterPage singlePage,
ILayouter layouter ):base(dataNavigator,singlePage,layouter)
{
}
public override ExporterCollection Convert (BaseReportItem parent,BaseReportItem item)
{
if (parent == null) {
throw new ArgumentNullException("parent");
}
if (item == null) {
throw new ArgumentNullException("item");
}
ExporterCollection mylist = base.Convert(parent,item);
this.baseTable = (BaseTableItem)item ;
this.baseTable.Parent = parent;
this.baseTable.DataNavigator = base.DataNavigator;
return ConvertInternal(mylist);
}
private ExporterCollection ConvertInternal(ExporterCollection mylist)
{
Point currentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.baseTable.Parent,this.baseTable).Location.X,
base.SectionBounds.DetailStart.Y);
int defaultLeftPos = currentPosition.X;
Point dataAreaStart = new Point(baseTable.Items[0].Location.X,baseTable.Items[0].Location.Y + currentPosition.Y);
ISimpleContainer headerContainer = null;
this.baseTable.Items.SortByLocation();
foreach (ISimpleContainer simpleContainer in this.baseTable.Items)
{
if (simpleContainer.Items.Count > 0) {
simpleContainer.Location = new Point (simpleContainer.Location.X,simpleContainer.Location.Y);
simpleContainer.Parent = (BaseReportItem)this.baseTable;
base.SaveSize( new Size (simpleContainer.Size.Width,simpleContainer.Size.Height));
// Header/FooterRow
if (PrintHelper.IsTextOnlyRow(simpleContainer) ) {
headerContainer = simpleContainer;
currentPosition = BaseConverter.BaseConvert(mylist,headerContainer,defaultLeftPos,currentPosition);
}
else
{
// DataRegion
base.SaveSize(simpleContainer.Size);
do {
//
BaseSection section = this.baseTable.Parent as BaseSection;
PrintHelper.AdjustSectionLocation(section);
base.FillRow(simpleContainer);
StandardPrinter.EvaluateRow(base.Evaluator,mylist);
base.PrepareContainerForConverting(null,simpleContainer);
Rectangle pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,currentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds))
{
base.BuildNewPage(mylist,section);
currentPosition = BaseConverter.BaseConvert(mylist,headerContainer,
defaultLeftPos,
base.SectionBounds.ReportHeaderRectangle.Location);
}
currentPosition = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
simpleContainer.Size = base.RestoreSize;
}
while (base.DataNavigator.MoveNext());
//Allway's reset the DataNavigator
base.DataNavigator.Reset();
base.DataNavigator.MoveNext();
SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left,
currentPosition.Y,
SectionBounds.ReportFooterRectangle.Width,
SectionBounds.ReportFooterRectangle.Height);
}
}
}
return mylist;
}
}
}

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

@ -16,7 +16,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -16,7 +16,7 @@ namespace ICSharpCode.Reports.Core.Exporter
readonly object addLock = new object();
internal delegate ExporterCollection ConverterDelegate (BaseSection s);
//internal delegate ExporterCollection ConverterDelegate (BaseSection s);
#region Constructor
@ -50,7 +50,6 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -50,7 +50,6 @@ namespace ICSharpCode.Reports.Core.Exporter
protected override void BuildNewPage ()
{
base.BuildNewPage();
this.BuildReportHeader();
this.BuildPageHeader();
}
@ -104,7 +103,8 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -104,7 +103,8 @@ namespace ICSharpCode.Reports.Core.Exporter
}
protected void BuildDetail (BaseSection section,IDataNavigator dataNavigator)
protected Point BuildDetail (BaseSection section,IDataNavigator dataNavigator)
{
ExporterCollection convertedList = new ExporterCollection();
@ -124,8 +124,10 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -124,8 +124,10 @@ namespace ICSharpCode.Reports.Core.Exporter
convertedList = baseConverter.Convert(section,item);
base.SinglePage.Items.AddRange(convertedList);
return baseConverter.CurrentPosition;
}
}
return Point.Empty;
}
@ -145,10 +147,15 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -145,10 +147,15 @@ namespace ICSharpCode.Reports.Core.Exporter
BaseSection section = base.ReportModel.DetailSection;
section.SectionOffset = base.SinglePage.SectionBounds.DetailStart.Y;
this.BuildDetail (section,dataNavigator);
var p = this.BuildDetail (section,dataNavigator);
var r = new Rectangle (SectionBounds.ReportFooterRectangle.Left,p.Y,
SectionBounds.ReportFooterRectangle.Size.Width,
SectionBounds.ReportFooterRectangle.Size.Height);
this.BuildReportFooter(r);
this.BuildReportFooter(SectionBounds.ReportFooterRectangle);
this.BuildPageFooter();
//this is the last Page
this.AddPage(base.SinglePage);
base.FinishRendering(this.dataNavigator);

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

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

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

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

7
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Globals/GlobalValues.cs

@ -95,12 +95,7 @@ namespace ICSharpCode.Reports.Core { @@ -95,12 +95,7 @@ namespace ICSharpCode.Reports.Core {
/// <summary>
/// The value on witch the Control is drawing bigger than the text inside
/// </summary>
/*
public static int EnlargeControl
{
get {return enlargeControl;}
}
*/
public static Margins ControlMargins
{

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

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

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

@ -88,8 +88,6 @@ namespace ICSharpCode.Reports.Core @@ -88,8 +88,6 @@ namespace ICSharpCode.Reports.Core
currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r);
// currentPosition = new Point(parent.Location.X + row.Location.X,currentPosition.Y);
tableContainer.Location = saveLocation;
Console.WriteLine("----");
}

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

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

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

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

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

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

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

@ -137,6 +137,16 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests @@ -137,6 +137,16 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
#endregion
#region test
private void settest ()
{
}
#endregion
[TestFixtureSetUp]
public void Init()
{

4
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/TestHelper.cs

@ -21,11 +21,7 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage @@ -21,11 +21,7 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage
p.ReportName = "SharpTestReport.srd";
p.ReportFileName =@"c:\testreports\SharpTestReport.srd";
p.ExecutionTime = new DateTime(2009,12,24,23,59,59);
return p;
}
}
}

Loading…
Cancel
Save