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. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseTextItem.cs
  6. 81
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs
  7. 45
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs
  8. 60
      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. 8
      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. 82
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs
  23. 85
      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. 153
      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. 19
      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. 21
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs
  33. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractDataRenderer.cs
  34. 19
      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
{ {
Application.UseWaitCursor = true; Application.UseWaitCursor = true;
Application.DoEvents(); // Application.DoEvents();
try { try {
IComponent cc = this.host.CreateComponent(typeof(ICSharpCode.Reports.Addin.Designer.RootReportModel),"RootReportModel"); 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; 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
void DesignerLoading(object sender, EventArgs e) void DesignerLoading(object sender, EventArgs e)
{ {
LoggingService.Debug("Forms designer: DesignerLoader loading..."); LoggingService.Debug("Forms designer: DesignerLoader loading...");
// this.reloadPending = false;
this.unloading = false; this.unloading = false;
// this.UserContent = this.pleaseWaitLabel;
Application.DoEvents();
} }
@ -176,12 +173,10 @@ namespace ICSharpCode.Reports.Addin
{ {
// This method is called when the designer has loaded. // This method is called when the designer has loaded.
LoggingService.Debug("Report designer: DesignerLoader loaded, HasSucceeded=" + e.HasSucceeded.ToString()); LoggingService.Debug("Report designer: DesignerLoader loaded, HasSucceeded=" + e.HasSucceeded.ToString());
// this.reloadPending = false;
this.unloading = false; this.unloading = false;
if (e.HasSucceeded) { if (e.HasSucceeded) {
// CreatePanel();
SetupDesignSurface(); SetupDesignSurface();
this.IsFormsDesignerVisible = true; this.IsFormsDesignerVisible = true;
generator.MergeFormChanges(null); generator.MergeFormChanges(null);
@ -250,6 +245,7 @@ namespace ICSharpCode.Reports.Addin
} }
#endregion #endregion
private void MergeFormChanges() private void MergeFormChanges()
{ {
System.Diagnostics.Trace.WriteLine("View:MergeFormChanges()"); System.Diagnostics.Trace.WriteLine("View:MergeFormChanges()");
@ -305,7 +301,6 @@ namespace ICSharpCode.Reports.Addin
#endregion #endregion
#region SelectionService #region SelectionService
private void SelectionChangedHandler(object sender, EventArgs args) private void SelectionChangedHandler(object sender, EventArgs args)
@ -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 #region HasPropertyContainer implementation
private void UpdatePropertyPad() private void UpdatePropertyPad()
@ -482,6 +416,7 @@ namespace ICSharpCode.Reports.Addin
#endregion #endregion
#region IUnDohandler #region IUnDohandler
#endregion #endregion

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

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

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

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

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

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

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

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

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

@ -23,7 +23,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
this.reportItems = reportItemCollection; this.reportItems = reportItemCollection;
ICSharpCode.Reports.Core.BaseRowItem row = new ICSharpCode.Reports.Core.BaseRowItem(); ICSharpCode.Reports.Core.BaseRowItem row = new ICSharpCode.Reports.Core.BaseRowItem();
AdjustContainer(base.ReportModel.DetailSection,row); AdjustContainer(base.ReportModel.DetailSection,row);
base.SetParent(row); base.ParentItem = row;
} }
@ -35,6 +35,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
base.CreatePageHeader(); base.CreatePageHeader();
ICSharpCode.Reports.Core.BaseRowItem row = CreateRowWithTextColumns(base.ReportModel.PageHeader, ICSharpCode.Reports.Core.BaseRowItem row = CreateRowWithTextColumns(base.ReportModel.PageHeader,
this.reportItems); this.reportItems);
AdjustContainer(ParentItem,row);
base.ReportModel.PageHeader.Items.Add(row); base.ReportModel.PageHeader.Items.Add(row);
} }
@ -44,39 +45,23 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
if (section == null) { if (section == null) {
throw new ArgumentNullException("section"); 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.ParentItem != null) { if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0)
base.AddItemsToContainer(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); ParentItem.Size = new Size(ParentItem.Size.Width,40);
section.Size = new Size(section.Size.Width,90);
} }
else{
AddItemsToSection (base.ReportModel.DetailSection,this.reportItems);
}
}
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(); var items = base.AddItemsToContainer(this.reportItems);
groupHeader.Location = new Point(5,10); ParentItem.Items.AddRange(items);
groupHeader.Size = new Size (300,30); ParentItem.Size = new Size(ParentItem.Size.Width,items[0].Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
groupHeader.Items.Add(dataItem); section.Items.Add(ParentItem as BaseReportItem);
base.ReportModel.DetailSection.Items.Add(groupHeader);
} }
#endregion #endregion

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

@ -4,6 +4,7 @@
using System; using System;
using System.Drawing; using System.Drawing;
using ICSharpCode.Reports.Core; using ICSharpCode.Reports.Core;
using ICSharpCode.Reports.Core.Interfaces;
namespace ICSharpCode.Reports.Addin.ReportWizard namespace ICSharpCode.Reports.Addin.ReportWizard
{ {
@ -22,7 +23,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
} }
public override void CreatePageHeader() public override void CreatePageHeader()
{ {
base.CreatePageHeader(); base.CreatePageHeader();
@ -40,39 +40,61 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
ICSharpCode.Reports.Core.BaseTableItem table = new ICSharpCode.Reports.Core.BaseTableItem(); ICSharpCode.Reports.Core.BaseTableItem table = new ICSharpCode.Reports.Core.BaseTableItem();
table.Name = "Table1"; table.Name = "Table1";
AdjustContainer(base.ReportModel.DetailSection,table); AdjustContainer(base.ReportModel.DetailSection,table);
base.ReportModel.DetailSection.Items.Add(table);
ICSharpCode.Reports.Core.BaseRowItem r1 = CreateRowWithTextColumns(table, base.ParentItem = table;
this.reportItems);
ICSharpCode.Reports.Core.BaseRowItem headerRow = CreateRowWithTextColumns(ParentItem, this.reportItems);
ParentItem.Items.Add (headerRow);
ICSharpCode.Reports.Core.BaseRowItem r2 = new ICSharpCode.Reports.Core.BaseRowItem(); Point insertLocation = new Point (margin.Left,headerRow.Location.Y + headerRow.Size.Height + margin.Bottom + margin.Top);
AdjustContainer (table,r2);
if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) {
r2.Location = new Point (margin.Left, var groupHeader = base.CreateGroupHeader(insertLocation);
r1.Location.Y + r1.Size.Height + margin.Bottom + margin.Top); ParentItem.Items.Add(groupHeader);
insertLocation = new Point(margin.Left,insertLocation.Y + groupHeader.Size.Height + margin.Bottom + margin.Top);
}
//Insert details allways
ICSharpCode.Reports.Core.BaseRowItem detailRow = new ICSharpCode.Reports.Core.BaseRowItem();
AdjustContainer (ParentItem,detailRow);
detailRow.Location = insertLocation;
detailRow.Size = new Size(detailRow.Size.Width,30);
int defX = r2.Size.Width / this.reportItems.Count; int defX = AbstractLayout.CalculateControlWidth(detailRow,reportItems);
int startX = r2.Location.X + margin.Left; int startX = margin.Left;
foreach (ICSharpCode.Reports.Core.BaseReportItem ir in this.reportItems) foreach (ICSharpCode.Reports.Core.BaseReportItem ir in this.reportItems)
{ {
Point np = new Point(startX,margin.Top); Point np = new Point(startX,margin.Top);
startX += defX; startX += defX;
ir.Location = np; ir.Location = np;
ir.Parent = r2; ir.Parent = detailRow;
r2.Items.Add(ir); detailRow.Items.Add(ir);
} }
table.Size = new Size (table.Size.Width, ParentItem.Items.Add (detailRow);
margin.Top + r1.Size.Height + margin.Bottom + r2.Size.Height + margin.Bottom); ParentItem.Size = CalculateContainerSize(ParentItem);
section.Size = new Size (section.Size.Width,table.Size.Height + margin.Top + margin.Bottom); section.Size = new Size (section.Size.Width,ParentItem.Size.Height + margin.Top + margin.Bottom);
table.Items.Add (r1); }
table.Items.Add (r2);
base.ReportModel.DetailSection.Items.Add(table);
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 @@
<Compile Include="Wizard\Generators\GeneratePlainReportFixture_2.cs" /> <Compile Include="Wizard\Generators\GeneratePlainReportFixture_2.cs" />
<Compile Include="Wizard\Generators\GenerateTableReportFixture.cs" /> <Compile Include="Wizard\Generators\GenerateTableReportFixture.cs" />
<Compile Include="Wizard\Generators\GeneratorFactoryFixture.cs" /> <Compile Include="Wizard\Generators\GeneratorFactoryFixture.cs" />
<Compile Include="Wizard\Generators\GenertaeTableWithgroupFixture.cs" />
<Compile Include="Wizard\Generators\ReportGenerationHelper.cs" /> <Compile Include="Wizard\Generators\ReportGenerationHelper.cs" />
<Compile Include="Wizard\ReportStructureFixture.cs" /> <Compile Include="Wizard\ReportStructureFixture.cs" />
</ItemGroup> </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
{ {
// TODO: Add tear down code. // TODO: Add tear down code.
} }
/*
private static ReportModel CreateModel (string reportName) private static ReportModel CreateModel (string reportName)
{ {
@ -120,6 +120,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
customizer.Set("Generator", structure); customizer.Set("Generator", structure);
customizer.Set("ReportLayout",GlobalEnums.ReportLayout.ListLayout); customizer.Set("ReportLayout",GlobalEnums.ReportLayout.ListLayout);
IReportGenerator generator = new GeneratePushDataReport(m,customizer); IReportGenerator generator = new GeneratePushDataReport(m,customizer);
generator.GenerateReport(); generator.GenerateReport();
@ -136,7 +137,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
return model; return model;
} }
*/
private static ReportStructure CreateReportStructure (string reportName) private static ReportStructure CreateReportStructure (string reportName)
{ {
ReportStructure structure = new ReportStructure(); ReportStructure structure = new ReportStructure();

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

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

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

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

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

@ -12,7 +12,8 @@ namespace ICSharpCode.Reports.Core
{ {
public BaseGroupedRow():base() 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;
namespace ICSharpCode.Reports.Core namespace ICSharpCode.Reports.Core
{ {
public class BaseSection : BaseReportItem { public class BaseSection : BaseReportItem,ISimpleContainer
{
private bool pageBreakAfter; private bool pageBreakAfter;
private ReportItemCollection items; private ReportItemCollection items;

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

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

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

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

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

@ -43,9 +43,10 @@ namespace ICSharpCode.Reports.Core
} }
public bool HasMoreData { public bool HasMoreData
{
get { get {
if (this.CurrentRow < this.Count -1 ){ if (this.CurrentRow < store.IndexList.Count -1 ){
return true; return true;
} else { } else {
return false; return false;
@ -64,6 +65,7 @@ namespace ICSharpCode.Reports.Core
public bool IsSorted {get {return this.store.IsSorted;}} public bool IsSorted {get {return this.store.IsSorted;}}
public bool IsGrouped {get {return this.store.IsGrouped;}} public bool IsGrouped {get {return this.store.IsGrouped;}}
@ -106,33 +108,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() private IndexList BuildChildList()
{ {
@ -147,6 +122,7 @@ namespace ICSharpCode.Reports.Core
#endregion #endregion
#region Try make recursive with ChildNavigavtor #region Try make recursive with ChildNavigavtor
public IDataNavigator GetChildNavigator() public IDataNavigator GetChildNavigator()

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

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

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

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

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

@ -2,7 +2,10 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Collections.ObjectModel;
using System.Drawing; using System.Drawing;
using System.Linq;
using ICSharpCode.Reports.Core.BaseClasses; using ICSharpCode.Reports.Core.BaseClasses;
using ICSharpCode.Reports.Core.BaseClasses.Printing; using ICSharpCode.Reports.Core.BaseClasses.Printing;
using ICSharpCode.Reports.Core.Events; using ICSharpCode.Reports.Core.Events;
@ -53,7 +56,6 @@ namespace ICSharpCode.Reports.Core.Exporter
} }
#region PageBreak #region PageBreak
protected void BuildNewPage(ExporterCollection myList,BaseSection section) protected void BuildNewPage(ExporterCollection myList,BaseSection section)
@ -69,6 +71,7 @@ namespace ICSharpCode.Reports.Core.Exporter
EventHelper.Raise<NewPageEventArgs>(PageFull,this,new NewPageEventArgs(items)); EventHelper.Raise<NewPageEventArgs>(PageFull,this,new NewPageEventArgs(items));
} }
#endregion #endregion
@ -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 #region IBaseConverter
@ -114,16 +152,19 @@ namespace ICSharpCode.Reports.Core.Exporter
return new ExporterCollection();; return new ExporterCollection();;
} }
public Point CurrentPosition {get;set;}
#endregion
public Rectangle ParentRectangle { public Rectangle ParentRectangle {
get { return parentRectangle; } get { return parentRectangle; }
} }
public ExporterPage SinglePage { public ISinglePage SinglePage {
get { return singlePage; } get { return singlePage; }
} }
public SectionBounds SectionBounds { public SectionBounds SectionBounds {
get { return sectionBounds; } get { return sectionBounds; }
} }
@ -138,9 +179,10 @@ namespace ICSharpCode.Reports.Core.Exporter
} }
public Graphics Graphics {get;set;} public Graphics Graphics {get;set;}
#endregion
protected void SaveSize(Size size)
protected void SaveSectionSize(Size size)
{ {
this.saveSize = size; this.saveSize = size;
} }
@ -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) protected void PrepareContainerForConverting(BaseSection section,ISimpleContainer simpleContainer)
{ {
if (section != null) { if (section != null) {
@ -174,17 +209,39 @@ 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;
}
protected static Point BaseConvert(ExporterCollection myList,ISimpleContainer container,int leftPos,Point curPos) protected static Point BaseConvert(ExporterCollection myList,ISimpleContainer container,int leftPos,Point curPos)
{ {
ExporterCollection ml = BaseConverter.ConvertItems (container, curPos); ExporterCollection ml = BaseConverter.ConvertItems (container, curPos);
myList.AddRange(ml); myList.AddRange(ml);
return new Point (leftPos,curPos.Y + container.Size.Height + (3 *GlobalValues.GapBetweenContainer)); 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
Type t = itemToConvert.GetType(); Type t = itemToConvert.GetType();
if (t.Equals(typeof(BaseTableItem))) { if (t.Equals(typeof(BaseTableItem))) {
return new TableConverter(dataNavigator,singlePage,layouter); return new GroupedTableConverter(dataNavigator,singlePage,layouter);
} }
if (t.Equals(typeof(BaseRowItem))) { if (t.Equals(typeof(BaseRowItem))) {

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

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

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

@ -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 @@
// 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;
}
}
}

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

@ -16,7 +16,7 @@ namespace ICSharpCode.Reports.Core.Exporter
readonly object addLock = new object(); readonly object addLock = new object();
internal delegate ExporterCollection ConverterDelegate (BaseSection s); //internal delegate ExporterCollection ConverterDelegate (BaseSection s);
#region Constructor #region Constructor
@ -50,7 +50,6 @@ namespace ICSharpCode.Reports.Core.Exporter
protected override void BuildNewPage () protected override void BuildNewPage ()
{ {
base.BuildNewPage(); base.BuildNewPage();
this.BuildReportHeader(); this.BuildReportHeader();
this.BuildPageHeader(); this.BuildPageHeader();
} }
@ -103,8 +102,9 @@ namespace ICSharpCode.Reports.Core.Exporter
base.SinglePage.Items.AddRange(convertedList); base.SinglePage.Items.AddRange(convertedList);
} }
protected void BuildDetail (BaseSection section,IDataNavigator dataNavigator)
protected Point BuildDetail (BaseSection section,IDataNavigator dataNavigator)
{ {
ExporterCollection convertedList = new ExporterCollection(); ExporterCollection convertedList = new ExporterCollection();
@ -124,8 +124,10 @@ namespace ICSharpCode.Reports.Core.Exporter
convertedList = baseConverter.Convert(section,item); convertedList = baseConverter.Convert(section,item);
base.SinglePage.Items.AddRange(convertedList); base.SinglePage.Items.AddRange(convertedList);
return baseConverter.CurrentPosition;
} }
} }
return Point.Empty;
} }
@ -145,10 +147,15 @@ namespace ICSharpCode.Reports.Core.Exporter
BaseSection section = base.ReportModel.DetailSection; BaseSection section = base.ReportModel.DetailSection;
section.SectionOffset = base.SinglePage.SectionBounds.DetailStart.Y; 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.BuildPageFooter();
//this is the last Page //this is the last Page
this.AddPage(base.SinglePage); this.AddPage(base.SinglePage);
base.FinishRendering(this.dataNavigator); 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
} }
} else { } else {
string str = String.Format ("<{0}> not found in AggregateFunction",data.ToString()); string str = String.Format ("<{0}> not found in AggregateFunction",data.ToString());
throw new FieldNotFoundException(str); // throw new FieldNotFoundException(str);
} }
} }
return list; 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
if (item != null) { if (item != null) {
retval = item.Value.ToString(); retval = item.Value.ToString();
} else { } else {
retval= String.Format(System.Globalization.CultureInfo.InvariantCulture, retval = GlobalValues.UnkownFunctionMessage(variable.VariableName);
"!! Can't find <{0}> !! ",variable.VariableName);
} }
return retval; return retval;
} }

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

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

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

@ -6,22 +6,35 @@ using System.Drawing;
using ICSharpCode.Reports.Core.BaseClasses; using ICSharpCode.Reports.Core.BaseClasses;
using ICSharpCode.Reports.Core.Events; using ICSharpCode.Reports.Core.Events;
using ICSharpCode.Reports.Core.Exporter; using ICSharpCode.Reports.Core.Exporter;
using ICSharpCode.Reports.Expressions.ReportingLanguage;
namespace ICSharpCode.Reports.Core.Interfaces namespace ICSharpCode.Reports.Core.Interfaces
{ {
/// <summary> /// <summary>
/// Description of IItemConverter. /// Description of IItemConverter.
/// </summary> /// </summary>
public interface IBaseConverter ///
{ public interface IRenderer
ExporterCollection Convert (BaseReportItem parent,BaseReportItem item); {
event EventHandler <NewPageEventArgs> PageFull; event EventHandler <NewPageEventArgs> PageFull;
event EventHandler<SectionRenderEventArgs> SectionRendering; event EventHandler<SectionRenderEventArgs> SectionRendering;
SectionBounds SectionBounds {get;} SectionBounds SectionBounds {get;}
IDataNavigator DataNavigator {get;} IDataNavigator DataNavigator {get;}
Rectangle ParentRectangle {get;} Rectangle ParentRectangle {get;}
ExporterPage SinglePage {get;} ISinglePage SinglePage {get;}
ILayouter Layouter {get;} ILayouter Layouter {get;}
Graphics Graphics {get;set;} 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;}
}
} }

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

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

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

@ -155,12 +155,19 @@ namespace ICSharpCode.Reports.Core {
rpea.PrintPageEventArgs.HasMorePages = false; rpea.PrintPageEventArgs.HasMorePages = false;
return; return;
} }
ITableContainer tableContainer = base.CurrentSection.Items[0] as ITableContainer; 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 // branch to render table's etc
if (tableContainer != null) if (tableContainer != null)
{ {
tableContainer.DataNavigator = nav; tableContainer.DataNavigator = nav;
tableContainer.Parent = base.CurrentSection; tableContainer.Parent = base.CurrentSection;
if (rpea.SinglePage.PageNumber == 1) { if (rpea.SinglePage.PageNumber == 1) {
@ -175,7 +182,8 @@ namespace ICSharpCode.Reports.Core {
this.ReportDocument.DetailsDone = true; this.ReportDocument.DetailsDone = true;
} }
else { else
{
// first element // first element
if (base.SinglePage.PageNumber ==1) { if (base.SinglePage.PageNumber ==1) {
@ -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; base.CurrentSection.SectionOffset = currentPosition.Y;
rpea.LocationAfterDraw = new Point (rpea.LocationAfterDraw.X, rpea.LocationAfterDraw = new Point (rpea.LocationAfterDraw.X,

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

@ -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 @@
/*
* 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
#endregion #endregion
#region test
private void settest ()
{
}
#endregion
[TestFixtureSetUp] [TestFixtureSetUp]
public void Init() 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
p.ReportName = "SharpTestReport.srd"; p.ReportName = "SharpTestReport.srd";
p.ReportFileName =@"c:\testreports\SharpTestReport.srd"; p.ReportFileName =@"c:\testreports\SharpTestReport.srd";
p.ExecutionTime = new DateTime(2009,12,24,23,59,59); p.ExecutionTime = new DateTime(2009,12,24,23,59,59);
return p; return p;
} }
} }
} }

Loading…
Cancel
Save