From 2ce0cd79b422bfdfcd13e84b89e40e8ca3e8bab8 Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Thu, 30 Sep 2010 20:00:52 +0200 Subject: [PATCH 01/15] Remove DoEvents from ReportDesigner --- .../DesignerBinding/InternalReportLoader.cs | 2 +- .../Project/ReportDesignerView.cs | 69 +------------------ 2 files changed, 3 insertions(+), 68 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/InternalReportLoader.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/InternalReportLoader.cs index 4101240bc8..6e199b4752 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/InternalReportLoader.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/InternalReportLoader.cs @@ -45,7 +45,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; diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportDesignerView.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportDesignerView.cs index 3fb6ec3ab3..1b239b4253 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportDesignerView.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportDesignerView.cs @@ -170,10 +170,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(); } @@ -181,12 +178,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); @@ -255,6 +250,7 @@ namespace ICSharpCode.Reports.Addin } #endregion + private void MergeFormChanges() { System.Diagnostics.Trace.WriteLine("View:MergeFormChanges()"); @@ -310,7 +306,6 @@ namespace ICSharpCode.Reports.Addin #endregion - #region SelectionService private void SelectionChangedHandler(object sender, EventArgs args) @@ -388,67 +383,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 entry in this.addedTypeDescriptionProviders) { - TypeDescriptor.RemoveProvider(entry.Value, entry.Key); - } - this.addedTypeDescriptionProviders.Clear(); - } - */ - #endregion - - #region HasPropertyContainer implementation private void UpdatePropertyPad() @@ -487,6 +421,7 @@ namespace ICSharpCode.Reports.Addin #endregion + #region IUnDohandler #endregion From d6807302a7e6385926795864e71c6b538345629c Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Thu, 30 Sep 2010 20:31:02 +0200 Subject: [PATCH 02/15] PageBreakOnGroupChange --- .../Project/ReportItems/BaseGroupedRow.cs | 12 +++-- .../Project/ReportItems/BaseTextItem.cs | 4 +- .../Project/BaseItems/BaseGroupedRow.cs | 3 +- .../Project/DataManager/DataNavigator.cs | 31 ++----------- .../DataManager/ListStrategy/TableStrategy.cs | 8 ++-- .../Converters/GroupedRowConverter.cs | 46 +++++++++++++++---- 6 files changed, 55 insertions(+), 49 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs index 748454f64a..e9ad4f2dbd 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs @@ -27,7 +27,8 @@ namespace ICSharpCode.Reports.Addin TypeDescriptor.AddProvider(new GroupedRowTypeProvider(), typeof(BaseGroupedRow)); } - + [Category("Behavior")] + public bool PageBreakOnGroupChange {get;set;} } @@ -83,16 +84,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()); } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseTextItem.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseTextItem.cs index 16b49d1693..2283cf97ca 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseTextItem.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseTextItem.cs @@ -91,10 +91,8 @@ namespace ICSharpCode.Reports.Addin [Browsable(true), Category("Appearance"), Description("String to format Number's Date's etc")] - [DefaultValue("entry1")] - -[TypeConverter(typeof(FormatStringConverter))] + [TypeConverter(typeof(FormatStringConverter))] public string FormatString { get { return formatString; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupedRow.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupedRow.cs index 0ebdab4e74..107a90308a 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupedRow.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupedRow.cs @@ -17,7 +17,8 @@ namespace ICSharpCode.Reports.Core { public BaseGroupedRow():base() { - Console.WriteLine("Constr baseGroupedrow"); } + + public bool PageBreakOnGroupChange {get;set;} } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs index 5b0df5742e..6190248a12 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs @@ -49,7 +49,8 @@ namespace ICSharpCode.Reports.Core public bool HasMoreData { get { - if (this.CurrentRow < this.Count -1 ){ + if (this.CurrentRow < store.IndexList.Count +1 ){ +// if (this.CurrentRow < this.Count -1 ){ return true; } else { return false; @@ -68,6 +69,7 @@ namespace ICSharpCode.Reports.Core public bool IsSorted {get {return this.store.IsSorted;}} + public bool IsGrouped {get {return this.store.IsGrouped;}} @@ -110,33 +112,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() { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs index fa9e30416a..d2fb53a753 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs @@ -104,10 +104,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); } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs index 100fe11c6d..59d1133ad9 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs @@ -102,12 +102,24 @@ namespace ICSharpCode.Reports.Core.Exporter pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],currentPosition); if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds )) { - base.BuildNewPage(exporterCollection,section); + ForcePagePreak (exporterCollection,section); +// base.BuildNewPage(exporterCollection,section); currentPosition = CalculateStartPosition (); } + + } - while ( childNavigator.MoveNext()); + if (PageBreakAfterGroupChange(section) ) { + var b = base.DataNavigator.HasMoreData; + Console.WriteLine("datanav {0}",b); + ForcePagePreak (exporterCollection,section); + Console.WriteLine ("PageBreakaftrer"); + + currentPosition = CalculateStartPosition (); + } + + var groupedRow = new Collection(section.Items.OfType().ToList()); base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator; } } @@ -119,12 +131,13 @@ namespace ICSharpCode.Reports.Core.Exporter pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],currentPosition); if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) { - base.BuildNewPage(exporterCollection,section); + ForcePagePreak (exporterCollection,section); currentPosition = CalculateStartPosition(); } ShouldDrawBorder (section,exporterCollection); + } while (base.DataNavigator.MoveNext()); @@ -136,18 +149,35 @@ namespace ICSharpCode.Reports.Core.Exporter } + + void ForcePagePreak(ExporterCollection exporterCollection, BaseSection section) + { + base.BuildNewPage(exporterCollection,section); + } + + + bool PageBreakAfterGroupChange(BaseSection section) + { + var groupedRowCollection = new Collection(section.Items.OfType().ToList()); + var groupedRow = groupedRowCollection[0]; + Console.WriteLine(base.DataNavigator.HasMoreData); + + return groupedRow.PageBreakOnGroupChange; + } + + 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,ISimpleContainer simpleContainer,int leftPos,Point offset) { Point retVal = Point.Empty; ReportItemCollection groupCollection = null; - var grh = new Collection(section.Items.OfType().ToList()); - if (grh.Count == 0) { + var groupedRow = new Collection(section.Items.OfType().ToList()); + if (groupedRow.Count == 0) { groupCollection = section.Items.ExtractGroupedColumns(); base.DataNavigator.Fill(groupCollection); base.FireSectionRendering(section); @@ -155,11 +185,11 @@ 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,groupedRow[0],leftPos,offset); } return retVal; } From cecb9c30f1a5df920d711c2b0521075c04a17a77 Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Fri, 1 Oct 2010 20:33:50 +0200 Subject: [PATCH 03/15] PageBreakAfterGroupeChanged --- .../BaseClasses/Printing/StandardPrinter.cs | 4 +- .../Project/DataManager/DataNavigator.cs | 2 +- .../Converters/GroupedRowConverter.cs | 46 ++++++++++--------- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs index cb4df1f483..8eec0e3799 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs +++ b/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); } } - } catch (Exception e) { - throw e; + } catch (Exception) { + throw ; } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs index 9f5616968e..5c9aab5257 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs @@ -45,7 +45,7 @@ namespace ICSharpCode.Reports.Core public bool HasMoreData { get { - if (this.CurrentRow < store.IndexList.Count +1 ){ + if (this.CurrentRow < store.IndexList.Count -1 ){ // if (this.CurrentRow < this.Count -1 ){ return true; } else { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs index 5298079dce..0de0b6fb77 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs @@ -64,7 +64,7 @@ namespace ICSharpCode.Reports.Core.Exporter int defaultLeftPos = parent.Location.X; Rectangle pageBreakRect = Rectangle.Empty; - + do { PrintHelper.AdjustSectionLocation (section); @@ -80,7 +80,7 @@ namespace ICSharpCode.Reports.Core.Exporter base.Evaluator.SinglePage.IDataNavigator = childNavigator; // Convert Grouping Header - currentPosition = ConvertGroupHeader(exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); + currentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,currentPosition); childNavigator.Reset(); childNavigator.MoveNext(); @@ -97,24 +97,26 @@ namespace ICSharpCode.Reports.Core.Exporter pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],currentPosition); if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds )) { - ForcePagePreak (exporterCollection,section); + currentPosition = ForcePageBreak (exporterCollection,section); // base.BuildNewPage(exporterCollection,section); - currentPosition = CalculateStartPosition (); +// currentPosition = CalculateStartPosition (); } } while ( childNavigator.MoveNext()); + + if (PageBreakAfterGroupChange(section) ) { - var b = base.DataNavigator.HasMoreData; - Console.WriteLine("datanav {0}",b); - ForcePagePreak (exporterCollection,section); - Console.WriteLine ("PageBreakaftrer"); + + if ( base.DataNavigator.HasMoreData) + { + currentPosition = ForcePageBreak (exporterCollection,section); + //currentPosition = CalculateStartPosition (); - currentPosition = CalculateStartPosition (); + } } - var groupedRow = new Collection(section.Items.OfType().ToList()); base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator; } } @@ -126,8 +128,8 @@ namespace ICSharpCode.Reports.Core.Exporter pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],currentPosition); if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) { - ForcePagePreak (exporterCollection,section); - currentPosition = CalculateStartPosition(); + currentPosition= ForcePageBreak (exporterCollection,section); +// currentPosition = CalculateStartPosition(); } ShouldDrawBorder (section,exporterCollection); @@ -144,20 +146,21 @@ namespace ICSharpCode.Reports.Core.Exporter } - - void ForcePagePreak(ExporterCollection exporterCollection, BaseSection section) + private Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section) { base.BuildNewPage(exporterCollection,section); + return CalculateStartPosition(); } - bool PageBreakAfterGroupChange(BaseSection section) + private static bool PageBreakAfterGroupChange(BaseSection section) { var groupedRowCollection = new Collection(section.Items.OfType().ToList()); - var groupedRow = groupedRowCollection[0]; - Console.WriteLine(base.DataNavigator.HasMoreData); - - return groupedRow.PageBreakOnGroupChange; + if (groupedRowCollection.Count > 0) { + var groupedRow = groupedRowCollection[0]; + return groupedRow.PageBreakOnGroupChange; + } + return false; } @@ -167,9 +170,9 @@ namespace ICSharpCode.Reports.Core.Exporter } - private Point ConvertGroupHeader(ExporterCollection exportList,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 groupedRow = new Collection(section.Items.OfType().ToList()); if (groupedRow.Count == 0) { @@ -213,7 +216,6 @@ namespace ICSharpCode.Reports.Core.Exporter 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; } From 8975a86e54829238fd3a3f13d4d0a88a69958738 Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Sat, 2 Oct 2010 20:35:11 +0200 Subject: [PATCH 04/15] Wizard can create grouped Tablelayout --- .../ReportLayout/AbstractLayout.cs | 21 ++++ .../ReportWizard/ReportLayout/ListLayout.cs | 22 +--- .../ReportWizard/ReportLayout/TableLayout.cs | 55 +++++--- .../Project/DataManager/DataNavigator.cs | 5 +- .../Converters/GroupedRowConverter.cs | 1 - .../Exporter/Converters/TableConverter.cs | 117 ++++++++++++++---- 6 files changed, 165 insertions(+), 56 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs index f13c8ebe71..aa4e410d22 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs @@ -170,6 +170,27 @@ namespace ICSharpCode.Reports.Addin.ReportWizard } + #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 (10,5); + 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,30); + groupHeader.Items.Add(dataItem); + return groupHeader; + } + + #endregion protected ReportModel ReportModel {get; private set;} diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs index 5c6e2441ee..8b20caa3e0 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs @@ -46,7 +46,10 @@ namespace ICSharpCode.Reports.Addin.ReportWizard } if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) { - InsertGroupHeader(); + var groupheader = base.CreateGroupHeader(new Point (5,10)); + + 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,100); @@ -62,23 +65,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard } - - 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); - } - #endregion } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs index e0c5a570b9..e843d8246d 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs @@ -4,6 +4,7 @@ using System; using System.Drawing; using ICSharpCode.Reports.Core; +using ICSharpCode.Reports.Core.Interfaces; namespace ICSharpCode.Reports.Addin.ReportWizard { @@ -43,36 +44,62 @@ namespace ICSharpCode.Reports.Addin.ReportWizard AdjustContainer(base.ReportModel.DetailSection,table); - ICSharpCode.Reports.Core.BaseRowItem r1 = CreateRowWithTextColumns(table, + + ICSharpCode.Reports.Core.BaseRowItem headerRow = CreateRowWithTextColumns(table, this.reportItems); + Point insertLocation = new Point (margin.Left,headerRow.Location.Y + headerRow.Size.Height + margin.Bottom + margin.Top); + + + if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) { + var groupHeader = base.CreateGroupHeader(insertLocation); + table.Items.Add(groupHeader); + insertLocation = new Point(margin.Left,insertLocation.Y + groupHeader.Size.Height + margin.Bottom + margin.Top); + } + - ICSharpCode.Reports.Core.BaseRowItem r2 = new ICSharpCode.Reports.Core.BaseRowItem(); + ICSharpCode.Reports.Core.BaseRowItem detailRow = new ICSharpCode.Reports.Core.BaseRowItem(); + AdjustContainer (table,detailRow); - AdjustContainer (table,r2); - - r2.Location = new Point (margin.Left, - r1.Location.Y + r1.Size.Height + margin.Bottom + margin.Top); + + detailRow.Location = insertLocation; - int defX = r2.Size.Width / this.reportItems.Count; + int defX = detailRow.Size.Width / this.reportItems.Count; - int startX = r2.Location.X + margin.Left; + int startX = detailRow.Location.X + 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); + insertLocation = new Point(margin.Left,insertLocation.Y + detailRow.Size.Height + margin.Bottom + margin.Top); + + + table.Items.Add (headerRow); + table.Items.Add (detailRow); + + table.Size = CalculateContainerSize(table,margin); + 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); } + + + private Size CalculateContainerSize(ISimpleContainer container,System.Drawing.Printing.Margins margin) + { + int h = margin.Top; + + foreach (ICSharpCode.Reports.Core.BaseReportItem item in container.Items) + { + h = h + item.Size.Height + margin.Bottom; + } + h = h + 3*margin.Bottom; + return new Size (container.Size.Width,h); + } } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs index 5c9aab5257..5f80861061 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs @@ -43,10 +43,10 @@ namespace ICSharpCode.Reports.Core } - public bool HasMoreData { + public bool HasMoreData + { get { if (this.CurrentRow < store.IndexList.Count -1 ){ -// if (this.CurrentRow < this.Count -1 ){ return true; } else { return false; @@ -122,6 +122,7 @@ namespace ICSharpCode.Reports.Core #endregion + #region Try make recursive with ChildNavigavtor public IDataNavigator GetChildNavigator() diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs index 0de0b6fb77..3f3502b487 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs @@ -2,7 +2,6 @@ // 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; diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs index 258ebf6966..80bad6e8f3 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs @@ -17,9 +17,8 @@ namespace ICSharpCode.Reports.Core.Exporter private ITableContainer baseTable; public TableConverter(IDataNavigator dataNavigator, - ExporterPage singlePage, - - ILayouter layouter ):base(dataNavigator,singlePage,layouter) + ExporterPage singlePage, ILayouter layouter ):base(dataNavigator,singlePage,layouter) + { } @@ -88,31 +87,107 @@ namespace ICSharpCode.Reports.Core.Exporter 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); + 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; + } + + + + private ExporterCollection old_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); - simpleContainer.Size = base.RestoreSize; + currentPosition = BaseConverter.BaseConvert(mylist,headerContainer, + defaultLeftPos, + base.SectionBounds.ReportHeaderRectangle.Location); + } - 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); + + 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; } + return mylist; } } +} From 0f2a8ae5226bb12fa6128c515f773c6bf6994fbd Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Sun, 3 Oct 2010 11:49:18 +0200 Subject: [PATCH 05/15] Cleanup Wizard Layouts, ISimpleContainer in BaseSection.cs --- .../ReportLayout/AbstractLayout.cs | 60 ++++++++++--------- .../ReportWizard/ReportLayout/ListLayout.cs | 17 ++++-- .../ReportWizard/ReportLayout/TableLayout.cs | 25 ++++---- .../Project/BaseItems/BaseSection.cs | 2 +- 4 files changed, 57 insertions(+), 47 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs index aa4e410d22..9a89d5ed5a 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs @@ -15,8 +15,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard public class AbstractLayout { - ISimpleContainer parentItem; - public AbstractLayout(ReportModel reportModel) { if (reportModel == null) { @@ -35,11 +33,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard this.ReportModel.ReportHeader.Items.Add(textItem); } - public virtual void SetParent (ISimpleContainer parentItem) - { - this.parentItem = parentItem; - } - + public virtual void CreatePageHeader () { } @@ -83,8 +77,8 @@ namespace ICSharpCode.Reports.Addin.ReportWizard item.Location = p; } - - 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,13 +86,13 @@ 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); @@ -106,11 +100,12 @@ namespace ICSharpCode.Reports.Addin.ReportWizard AdjustContainer(parent,row); int defY = parent.Location.Y + GlobalValues.ControlMargins.Top; - int defX = row.Size.Width / colDetail.Count; + 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 } + private static ReportItemCollection HeaderColumnsFromReportItems(ReportItemCollection reportItemCollection) { if (reportItemCollection == null) { @@ -138,35 +134,44 @@ namespace ICSharpCode.Reports.Addin.ReportWizard } #endregion - - protected static void AddItemsToSection (ICSharpCode.Reports.Core.BaseSection section,ReportItemCollection items) + /* + protected static ReportItemCollection AddItemsToSection (ICSharpCode.Reports.Core.BaseSection section,ReportItemCollection items) { int defY = section.Location.Y + GlobalValues.ControlMargins.Top; - int defX = section.Size.Width / items.Count; + int ctrlWidth = CalculateControlWidth(section,items); int startX = section.Location.X + GlobalValues.ControlMargins.Left; - + var vv = new ReportItemCollection(); foreach (var ir in items) { Point np = new Point(startX,defY); - startX += defX; + startX += ctrlWidth; ir.Location = np; - section.Items.Add(ir); +// section.Items.Add(ir); + vv.Add(ir); } + return vv; } + */ - - protected void AddItemsToContainer (ICSharpCode.Reports.Core.BaseSection section,ReportItemCollection items) + protected ReportItemCollection AddItemsToContainer (ReportItemCollection items) { - 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; + int locationX = this.ParentItem.Location.X + GlobalValues.ControlMargins.Left; + var minCtrlWidth = CalculateControlWidth(ParentItem,items); + var col = new ReportItemCollection(); foreach (var ir in items) { ir.Location = new Point(locationX,locationY); - this.parentItem.Items.Add(ir); + col.Add(ir); locationX += minCtrlWidth; } + return col; + } + + + protected static int CalculateControlWidth(ISimpleContainer row, ReportItemCollection colDetail) + { + return row.Size.Width / colDetail.Count; } @@ -191,12 +196,11 @@ namespace ICSharpCode.Reports.Addin.ReportWizard } #endregion + protected ReportModel ReportModel {get; private set;} - protected ISimpleContainer ParentItem { - get { return parentItem; } - } + protected ISimpleContainer ParentItem {get;set;} } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs index 8b20caa3e0..e691758393 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs @@ -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; } @@ -45,7 +45,9 @@ namespace ICSharpCode.Reports.Addin.ReportWizard throw new ArgumentNullException("section"); } - if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) { + if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) + { + var groupheader = base.CreateGroupHeader(new Point (5,10)); base.ReportModel.DetailSection.Items.Add(groupheader); @@ -56,11 +58,16 @@ namespace ICSharpCode.Reports.Addin.ReportWizard } if (base.ParentItem != null) { - base.AddItemsToContainer(base.ReportModel.DetailSection,this.reportItems); + var items = base.AddItemsToContainer(this.reportItems); + ParentItem.Items.AddRange(items); ParentItem.Size = new Size(ParentItem.Size.Width,40); + section.Items.Add(ParentItem as BaseReportItem); } - else{ - AddItemsToSection (base.ReportModel.DetailSection,this.reportItems); + else + { + //var items1 = AddItemsToSection (base.ReportModel.DetailSection,this.reportItems); + //AddItemsToSection (base.ReportModel.DetailSection,this.reportItems); + //section.Items.AddRange(items1); } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs index e843d8246d..16d4cdde00 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs @@ -23,7 +23,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard } - public override void CreatePageHeader() { base.CreatePageHeader(); @@ -41,30 +40,30 @@ 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 headerRow = CreateRowWithTextColumns(table, - this.reportItems); + ICSharpCode.Reports.Core.BaseRowItem headerRow = CreateRowWithTextColumns(ParentItem, this.reportItems); + Point insertLocation = new Point (margin.Left,headerRow.Location.Y + headerRow.Size.Height + margin.Bottom + margin.Top); if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) { var groupHeader = base.CreateGroupHeader(insertLocation); - table.Items.Add(groupHeader); + ParentItem.Items.Add(groupHeader); insertLocation = new Point(margin.Left,insertLocation.Y + groupHeader.Size.Height + margin.Bottom + margin.Top); } ICSharpCode.Reports.Core.BaseRowItem detailRow = new ICSharpCode.Reports.Core.BaseRowItem(); - AdjustContainer (table,detailRow); - + AdjustContainer (ParentItem,detailRow); detailRow.Location = insertLocation; - int defX = detailRow.Size.Width / this.reportItems.Count; + int defX = AbstractLayout.CalculateControlWidth(detailRow,reportItems); int startX = detailRow.Location.X + margin.Left; @@ -80,13 +79,13 @@ namespace ICSharpCode.Reports.Addin.ReportWizard insertLocation = new Point(margin.Left,insertLocation.Y + detailRow.Size.Height + margin.Bottom + margin.Top); - table.Items.Add (headerRow); - table.Items.Add (detailRow); + ParentItem.Items.Add (headerRow); + ParentItem.Items.Add (detailRow); - table.Size = CalculateContainerSize(table,margin); + ParentItem.Size = CalculateContainerSize(ParentItem,margin); - section.Size = new Size (section.Size.Width,table.Size.Height + margin.Top + margin.Bottom); - base.ReportModel.DetailSection.Items.Add(table); + section.Size = new Size (section.Size.Width,ParentItem.Size.Height + margin.Top + margin.Bottom); + } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs index ee3cbeeda9..d8d74d1cdd 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs @@ -16,7 +16,7 @@ using ICSharpCode.Reports.Core.Interfaces; namespace ICSharpCode.Reports.Core { - public class BaseSection : BaseReportItem { + public class BaseSection : BaseReportItem,ISimpleContainer { private bool pageBreakAfter; private ReportItemCollection items; From c0cfc4b81b11d43e4c072a7074ae6cb037a78388 Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Sun, 3 Oct 2010 18:42:50 +0200 Subject: [PATCH 06/15] UnitTest for CreateGroupedReport from TableLayout.cs --- .../ReportWizard/ReportLayout/TableLayout.cs | 4 +- .../ICSharpCode.Reports.Addin.Test.csproj | 1 + .../GenerateListWithGroupFixture.cs | 5 +- .../GenertaeTableWithgroupFixture.cs | 127 ++++++++++++++++++ 4 files changed, 132 insertions(+), 5 deletions(-) create mode 100644 src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenertaeTableWithgroupFixture.cs diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs index 16d4cdde00..2e7ee955bb 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs @@ -46,7 +46,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard base.ParentItem = table; 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); @@ -78,8 +78,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard insertLocation = new Point(margin.Left,insertLocation.Y + detailRow.Size.Height + margin.Bottom + margin.Top); - - ParentItem.Items.Add (headerRow); ParentItem.Items.Add (detailRow); ParentItem.Size = CalculateContainerSize(ParentItem,margin); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/ICSharpCode.Reports.Addin.Test.csproj b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/ICSharpCode.Reports.Addin.Test.csproj index 77276b77a0..4934da2604 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/ICSharpCode.Reports.Addin.Test.csproj +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/ICSharpCode.Reports.Addin.Test.csproj @@ -70,6 +70,7 @@ + diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenerateListWithGroupFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenerateListWithGroupFixture.cs index a4d6bf8c98..2dfae7317d 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenerateListWithGroupFixture.cs +++ b/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. } - + /* private static ReportModel CreateModel (string reportName) { @@ -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 return model; } - + */ private static ReportStructure CreateReportStructure (string reportName) { ReportStructure structure = new ReportStructure(); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenertaeTableWithgroupFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenertaeTableWithgroupFixture.cs new file mode 100644 index 0000000000..e8f1029aa9 --- /dev/null +++ b/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 + + } +} From 4155ddd8f8d4958253f85d86c2b24a1a6d4df5ee Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Tue, 5 Oct 2010 20:32:05 +0200 Subject: [PATCH 07/15] Grouping in TableLayout --- .../ICSharpCode.Reports.Core.csproj | 1 + .../Project/BaseItems/BaseSection.cs | 3 +- .../Exporter/Converters/ConverterFactory.cs | 2 +- .../Converters/GroupedRowConverter.cs | 11 - .../Converters/GroupedTableConverter.cs | 214 ++++++++++++++++++ 5 files changed, 218 insertions(+), 13 deletions(-) create mode 100644 src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj index d0e2e7fb90..20c506a7e6 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj @@ -138,6 +138,7 @@ + diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs index d8d74d1cdd..4b54567b96 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs @@ -16,7 +16,8 @@ using ICSharpCode.Reports.Core.Interfaces; namespace ICSharpCode.Reports.Core { - public class BaseSection : BaseReportItem,ISimpleContainer { + public class BaseSection : BaseReportItem,ISimpleContainer + { private bool pageBreakAfter; private ReportItemCollection items; diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/ConverterFactory.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/ConverterFactory.cs index 1cbe65190b..4873a32c13 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/ConverterFactory.cs +++ b/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(); if (t.Equals(typeof(BaseTableItem))) { - return new TableConverter(dataNavigator,singlePage,layouter); + return new GroupedTableConverter(dataNavigator,singlePage,layouter); } if (t.Equals(typeof(BaseRowItem))) { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs index 3f3502b487..a9e9b2e60a 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs @@ -97,22 +97,15 @@ namespace ICSharpCode.Reports.Core.Exporter if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds )) { currentPosition = ForcePageBreak (exporterCollection,section); -// base.BuildNewPage(exporterCollection,section); -// currentPosition = CalculateStartPosition (); } - - } while ( childNavigator.MoveNext()); - if (PageBreakAfterGroupChange(section) ) { if ( base.DataNavigator.HasMoreData) { currentPosition = ForcePageBreak (exporterCollection,section); - //currentPosition = CalculateStartPosition (); - } } @@ -128,12 +121,9 @@ namespace ICSharpCode.Reports.Core.Exporter pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],currentPosition); if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) { currentPosition= ForcePageBreak (exporterCollection,section); -// currentPosition = CalculateStartPosition(); } ShouldDrawBorder (section,exporterCollection); - - } while (base.DataNavigator.MoveNext()); @@ -206,7 +196,6 @@ namespace ICSharpCode.Reports.Core.Exporter base.FillRow(simpleContainer); PrepareContainerForConverting(section,simpleContainer); Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); - StandardPrinter.EvaluateRow(base.Evaluator,mylist); AfterConverting (section,mylist); return curPos; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs new file mode 100644 index 0000000000..55e5eeb617 --- /dev/null +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs @@ -0,0 +1,214 @@ +// 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; +using System.Linq; +using System.Collections.ObjectModel; + +namespace ICSharpCode.Reports.Core.Exporter +{ + /// + /// Description of TableConverter. + /// + 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) + { + + Point currentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.table.Parent,this.table).Location.X, + base.SectionBounds.DetailStart.Y); + + int defaultLeftPos = currentPosition.X; + + Point dataAreaStart = new Point(table.Items[0].Location.X,table.Items[0].Location.Y + 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) { + //---- +// do { + simpleContainer.Location = new Point (simpleContainer.Location.X,simpleContainer.Location.Y); + simpleContainer.Parent = (BaseReportItem)this.table; + + base.SaveSize( new Size (simpleContainer.Size.Width,simpleContainer.Size.Height)); + + if (PrintHelper.IsTextOnlyRow(simpleContainer) ) { + Console.WriteLine("Print HeaderRow"); + headerRow = simpleContainer; + currentPosition = BaseConverter.BaseConvert(exporterCollection,headerRow,defaultLeftPos,currentPosition); + } + + BaseGroupedRow row = table.Items[1] as BaseGroupedRow; + + if (row != null) { + + //grouped + do { + + Console.WriteLine("Group detected"); + // GetType child navigator + IDataNavigator childNavigator = base.DataNavigator.GetChildNavigator(); + + base.Evaluator.SinglePage.IDataNavigator = childNavigator; + // Convert Grouping Header + + currentPosition = ConvertGroupHeader(exporterCollection,(BaseSection)table.Parent,defaultLeftPos,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); + + currentPosition = ConvertGroupChilds (exporterCollection,(BaseSection)table.Parent, + simpleContainer,defaultLeftPos,currentPosition); + + } + while ( childNavigator.MoveNext()); + + base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator; + } + } + while (base.DataNavigator.MoveNext()); + } + + else + { + // No Grouping at all + + // DataRegion + + base.SaveSize(simpleContainer.Size); + simpleContainer = table.Items[1] as ISimpleContainer; + + do { + // + BaseSection section = this.table.Parent as BaseSection; + PrintHelper.AdjustSectionLocation(section); + + pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,currentPosition); + + if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) + { + Console.WriteLine("PageBreak - PageFull"); + base.BuildNewPage(exporterCollection,section); + + currentPosition = base.SectionBounds.ReportHeaderRectangle.Location; + currentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,currentPosition); + } + + currentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); + + simpleContainer.Size = base.RestoreSize; + } + while (base.DataNavigator.MoveNext()); + + base.DataNavigator.Reset(); + base.DataNavigator.MoveNext(); + SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left, + currentPosition.Y, + SectionBounds.ReportFooterRectangle.Width, + SectionBounds.ReportFooterRectangle.Height); + } + } + return exporterCollection; + } + + + + //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(table.Items.OfType().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; + } + + + 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 void AfterConverting (BaseSection section,ExporterCollection mylist) + { + Console.WriteLine("AfterConverting"); + StandardPrinter.EvaluateRow(base.Evaluator,mylist); +// section.Items[0].Size = base.RestoreSize; +// section.SectionOffset += section.Size.Height + 3 * GlobalValues.GapBetweenContainer; + } + + 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); + AfterConverting (section,mylist); + return curPos; + } + } +} + From d724ce4a2b9711fda185294452676ad69c2356fb Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Wed, 6 Oct 2010 20:21:32 +0200 Subject: [PATCH 08/15] Cleanup in BaseConverter.cs --- .../Exporter/Converters/BaseConverter.cs | 52 +++++++++++++++---- .../Converters/GroupedRowConverter.cs | 43 +++------------ .../Converters/GroupedTableConverter.cs | 40 +++----------- .../Exporter/Converters/TableConverter.cs | 4 +- 4 files changed, 59 insertions(+), 80 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs index c6e2b0642d..3f6264a2f1 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs @@ -53,7 +53,6 @@ namespace ICSharpCode.Reports.Core.Exporter } - #region PageBreak protected void BuildNewPage(ExporterCollection myList,BaseSection section) @@ -69,6 +68,7 @@ namespace ICSharpCode.Reports.Core.Exporter EventHelper.Raise(PageFull,this,new NewPageEventArgs(items)); } + #endregion @@ -105,6 +105,17 @@ 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 (mylist); + return curPos; + } + + #endregion #region IBaseConverter @@ -140,6 +151,8 @@ namespace ICSharpCode.Reports.Core.Exporter public Graphics Graphics {get;set;} #endregion + + protected void SaveSize(Size size) { this.saveSize = size; @@ -158,13 +171,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,17 +180,41 @@ namespace ICSharpCode.Reports.Core.Exporter } - private void LayoutRow (ISimpleContainer row) + protected void AfterConverting (ExporterCollection convertedList) { - PrintHelper.SetLayoutForRow(Graphics,Layouter,row); + StandardPrinter.EvaluateRow(Evaluator,convertedList); +// section.Items[0].Size = base.RestoreSize; +// section.SectionOffset += section.Size.Height + 3 * GlobalValues.GapBetweenContainer; } - + + 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 (mylist); + return curPos; + } + + protected static Point BaseConvert(ExporterCollection myList,ISimpleContainer container,int leftPos,Point curPos) { ExporterCollection ml = BaseConverter.ConvertItems (container, curPos); myList.AddRange(ml); return new Point (leftPos,curPos.Y + container.Size.Height + (3 *GlobalValues.GapBetweenContainer)); } + + + private void FillRow (ISimpleContainer row) + { + DataNavigator.Fill(row.Items); + } + + + private void LayoutRow (ISimpleContainer row) + { + PrintHelper.SetLayoutForRow(Graphics,Layouter,row); + } } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs index a9e9b2e60a..bc9a2f2382 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs @@ -22,8 +22,8 @@ namespace ICSharpCode.Reports.Core.Exporter private BaseReportItem parent; 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) @@ -45,7 +45,7 @@ namespace ICSharpCode.Reports.Core.Exporter ExporterCollection myList = new ExporterCollection(); 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; } else { @@ -63,7 +63,7 @@ namespace ICSharpCode.Reports.Core.Exporter int defaultLeftPos = parent.Location.X; Rectangle pageBreakRect = Rectangle.Empty; - + do { PrintHelper.AdjustSectionLocation (section); @@ -85,9 +85,9 @@ namespace ICSharpCode.Reports.Core.Exporter childNavigator.MoveNext(); //Convert children - if (childNavigator != null) { + if (childNavigator != null) { StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor); - + do { childNavigator.Fill(simpleContainer.Items); @@ -173,41 +173,14 @@ namespace ICSharpCode.Reports.Core.Exporter StandardPrinter.EvaluateRow(base.Evaluator,list); exportList.AddRange(list); - AfterConverting (section,list); + AfterConverting (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; } - - - 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); - 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) { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs index 55e5eeb617..e3077c3f6d 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs @@ -46,6 +46,8 @@ namespace ICSharpCode.Reports.Core.Exporter private ExporterCollection ConvertInternal(ExporterCollection exporterCollection) { + BaseSection section = table.Parent as BaseSection; + Point currentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.table.Parent,this.table).Location.X, base.SectionBounds.DetailStart.Y); @@ -89,7 +91,7 @@ namespace ICSharpCode.Reports.Core.Exporter base.Evaluator.SinglePage.IDataNavigator = childNavigator; // Convert Grouping Header - currentPosition = ConvertGroupHeader(exporterCollection,(BaseSection)table.Parent,defaultLeftPos,currentPosition); + currentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,currentPosition); childNavigator.Reset(); childNavigator.MoveNext(); @@ -103,7 +105,8 @@ namespace ICSharpCode.Reports.Core.Exporter childNavigator.Fill(simpleContainer.Items); - currentPosition = ConvertGroupChilds (exporterCollection,(BaseSection)table.Parent, + currentPosition = ConvertGroupChilds (exporterCollection, + section, simpleContainer,defaultLeftPos,currentPosition); } @@ -119,14 +122,11 @@ namespace ICSharpCode.Reports.Core.Exporter { // No Grouping at all - // DataRegion - base.SaveSize(simpleContainer.Size); simpleContainer = table.Items[1] as ISimpleContainer; do { - // - BaseSection section = this.table.Parent as BaseSection; + PrintHelper.AdjustSectionLocation(section); pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,currentPosition); @@ -160,6 +160,7 @@ namespace ICSharpCode.Reports.Core.Exporter //Copy from GroupedRow + private Point ConvertGroupHeader(ExporterCollection exportList,BaseSection section,int leftPos,Point offset) { var retVal = Point.Empty; @@ -176,7 +177,7 @@ namespace ICSharpCode.Reports.Core.Exporter StandardPrinter.EvaluateRow(base.Evaluator,list); exportList.AddRange(list); - AfterConverting (section,list); + AfterConverting (list); retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer)); } else { retVal = ConvertStandardRow(exportList,section,groupedRow[0],leftPos,offset); @@ -184,31 +185,6 @@ namespace ICSharpCode.Reports.Core.Exporter 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 void AfterConverting (BaseSection section,ExporterCollection mylist) - { - Console.WriteLine("AfterConverting"); - StandardPrinter.EvaluateRow(base.Evaluator,mylist); -// section.Items[0].Size = base.RestoreSize; -// section.SectionOffset += section.Size.Height + 3 * GlobalValues.GapBetweenContainer; - } - - 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); - AfterConverting (section,mylist); - return curPos; - } } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs index 80bad6e8f3..b3278135cc 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs @@ -78,7 +78,7 @@ namespace ICSharpCode.Reports.Core.Exporter BaseSection section = this.baseTable.Parent as BaseSection; PrintHelper.AdjustSectionLocation(section); - base.FillRow(simpleContainer); +// base.FillRow(simpleContainer); StandardPrinter.EvaluateRow(base.Evaluator,mylist); @@ -154,7 +154,7 @@ namespace ICSharpCode.Reports.Core.Exporter BaseSection section = this.baseTable.Parent as BaseSection; PrintHelper.AdjustSectionLocation(section); - base.FillRow(simpleContainer); +// base.FillRow(simpleContainer); StandardPrinter.EvaluateRow(base.Evaluator,mylist); From f4f36e920c556197850867738377c2de8f692db7 Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Thu, 7 Oct 2010 20:32:20 +0200 Subject: [PATCH 09/15] PageBreakAfterGroupChange in TableLayout --- .../Exporter/Converters/BaseConverter.cs | 27 +++++++++++++- .../Converters/GroupedRowConverter.cs | 24 ++++--------- .../Converters/GroupedTableConverter.cs | 35 +++++++++++++------ 3 files changed, 57 insertions(+), 29 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs index 3f6264a2f1..e8ec5c272f 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs +++ b/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) 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; @@ -115,6 +118,29 @@ namespace ICSharpCode.Reports.Core.Exporter 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 FindGroups (ISimpleContainer container) + { + return new Collection(container.Items.OfType().ToList()); + } + + + protected virtual Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section) + { + BuildNewPage(exporterCollection,section); + return Point.Empty; + } + #endregion #region IBaseConverter @@ -152,7 +178,6 @@ namespace ICSharpCode.Reports.Core.Exporter #endregion - protected void SaveSize(Size size) { this.saveSize = size; diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs index bc9a2f2382..25b0c90e73 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs @@ -119,6 +119,7 @@ namespace ICSharpCode.Reports.Core.Exporter } pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],currentPosition); + if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) { currentPosition= ForcePageBreak (exporterCollection,section); } @@ -135,23 +136,12 @@ namespace ICSharpCode.Reports.Core.Exporter } - private Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section) + protected override Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section) { - base.BuildNewPage(exporterCollection,section); + base.ForcePageBreak(exporterCollection,section); return CalculateStartPosition(); } - - - private static bool PageBreakAfterGroupChange(BaseSection section) - { - var groupedRowCollection = new Collection(section.Items.OfType().ToList()); - if (groupedRowCollection.Count > 0) { - var groupedRow = groupedRowCollection[0]; - return groupedRow.PageBreakOnGroupChange; - } - return false; - } - + private Point CalculateStartPosition() { @@ -163,8 +153,8 @@ namespace ICSharpCode.Reports.Core.Exporter { var retVal = Point.Empty; ReportItemCollection groupCollection = null; - var groupedRow = new Collection(section.Items.OfType().ToList()); - if (groupedRow.Count == 0) { + var groupedRows = BaseConverter.FindGroups(section); + if (groupedRows.Count == 0) { groupCollection = section.Items.ExtractGroupedColumns(); base.DataNavigator.Fill(groupCollection); base.FireSectionRendering(section); @@ -176,7 +166,7 @@ namespace ICSharpCode.Reports.Core.Exporter AfterConverting (list); retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer)); } else { - retVal = ConvertStandardRow(exportList,section,groupedRow[0],leftPos,offset); + retVal = ConvertStandardRow(exportList,section,groupedRows[0],leftPos,offset); } return retVal; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs index e3077c3f6d..194e694b6b 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs @@ -63,16 +63,14 @@ namespace ICSharpCode.Reports.Core.Exporter var simpleContainer = table.Items[0] as ISimpleContainer; - if (simpleContainer.Items.Count > 0) { - //---- -// do { + if (simpleContainer.Items.Count > 0) + { simpleContainer.Location = new Point (simpleContainer.Location.X,simpleContainer.Location.Y); simpleContainer.Parent = (BaseReportItem)this.table; base.SaveSize( new Size (simpleContainer.Size.Width,simpleContainer.Size.Height)); if (PrintHelper.IsTextOnlyRow(simpleContainer) ) { - Console.WriteLine("Print HeaderRow"); headerRow = simpleContainer; currentPosition = BaseConverter.BaseConvert(exporterCollection,headerRow,defaultLeftPos,currentPosition); } @@ -84,7 +82,6 @@ namespace ICSharpCode.Reports.Core.Exporter //grouped do { - Console.WriteLine("Group detected"); // GetType child navigator IDataNavigator childNavigator = base.DataNavigator.GetChildNavigator(); @@ -108,10 +105,26 @@ namespace ICSharpCode.Reports.Core.Exporter currentPosition = ConvertGroupChilds (exporterCollection, section, simpleContainer,defaultLeftPos,currentPosition); + pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,currentPosition); + if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) + { + currentPosition = base.ForcePageBreak(exporterCollection,section); + currentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,currentPosition); + } } while ( childNavigator.MoveNext()); + if (PageBreakAfterGroupChange(table) ) + { + if ( base.DataNavigator.HasMoreData) + { + currentPosition = base.ForcePageBreak(exporterCollection,section); + currentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,currentPosition); + } + + } + base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator; } } @@ -133,10 +146,7 @@ namespace ICSharpCode.Reports.Core.Exporter if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) { - Console.WriteLine("PageBreak - PageFull"); - base.BuildNewPage(exporterCollection,section); - - currentPosition = base.SectionBounds.ReportHeaderRectangle.Location; + currentPosition = base.ForcePageBreak(exporterCollection,section); currentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,currentPosition); } @@ -157,8 +167,11 @@ namespace ICSharpCode.Reports.Core.Exporter 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) From 2903ee291356053bd01555db0ef17e89951d9e10 Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Thu, 7 Oct 2010 20:37:43 +0200 Subject: [PATCH 10/15] Cleanup --- .../ICSharpCode.Reports.Core.csproj | 1 - .../Converters/GroupedRowConverter.cs | 3 - .../Converters/GroupedTableConverter.cs | 5 +- .../Exporter/Converters/TableConverter.cs | 193 ------------------ 4 files changed, 3 insertions(+), 199 deletions(-) delete mode 100644 src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj index 20c506a7e6..ce4fa1c731 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj @@ -144,7 +144,6 @@ - diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs index 25b0c90e73..c1c07d7843 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs @@ -2,10 +2,7 @@ // 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; diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs index 194e694b6b..eb0f01e465 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs @@ -2,11 +2,12 @@ // 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; -using System.Linq; -using System.Collections.ObjectModel; namespace ICSharpCode.Reports.Core.Exporter { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs deleted file mode 100644 index b3278135cc..0000000000 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs +++ /dev/null @@ -1,193 +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 -{ - /// - /// Description of TableConverter. - /// - 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; - } - - - - private ExporterCollection old_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; - } - } -} From 1deff73d2bbf2e734554745a587e70f2dc0558b8 Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Sun, 10 Oct 2010 20:06:50 +0200 Subject: [PATCH 11/15] Refactor DataRenderer to show groupings --- .../Project/ReportExplorer/ExplorerTree.cs | 3 +- .../ICSharpCode.Reports.Core.csproj | 2 + .../Project/DataManager/DataManager.cs | 1 - .../Exporter/Converters/BaseConverter.cs | 3 +- .../AggregateFunctions/AggregateFunction.cs | 2 +- .../ReportingService/FieldReference.cs | 3 +- .../Project/Interfaces/IItemConverter.cs | 20 +- .../Project/Printing/AbstractDataRenderer.cs | 4 +- .../Project/Printing/RenderDataReport.cs | 19 +- .../Project/Printing/RenderTable.cs | 230 ++++++++++++++++++ .../Project/Printing/RendererFactory.cs | 38 +++ 11 files changed, 303 insertions(+), 22 deletions(-) create mode 100644 src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderTable.cs create mode 100644 src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RendererFactory.cs diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs index 2c49e1d109..70bec05113 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs @@ -337,7 +337,6 @@ namespace ICSharpCode.Reports.Addin } - public void BuildTree () { this.BeginUpdate(); @@ -345,10 +344,12 @@ namespace ICSharpCode.Reports.Addin SetSortColumns(); SetGroupColumns(); SetParameters(); +// SetFunctions(); this.ExpandAll(); this.EndUpdate(); } + #endregion #region Build Basic Tree diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj index ce4fa1c731..ce082baaa2 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj @@ -272,7 +272,9 @@ + + Component diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataManager.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataManager.cs index 768dadb030..53250ed5c9 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataManager.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataManager.cs @@ -64,7 +64,6 @@ namespace ICSharpCode.Reports.Core { } } - #endregion diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs index e8ec5c272f..7732655d62 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs @@ -157,10 +157,11 @@ namespace ICSharpCode.Reports.Core.Exporter } - public ExporterPage SinglePage { + public ISinglePage SinglePage { get { return singlePage; } } + public SectionBounds SectionBounds { get { return sectionBounds; } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs index 3373aaaa18..fe3ee2d674 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs +++ b/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 { string str = String.Format ("<{0}> not found in AggregateFunction",data.ToString()); - throw new FieldNotFoundException(str); +// throw new FieldNotFoundException(str); } } return list; diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/ReportingService/FieldReference.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/ReportingService/FieldReference.cs index 07ffdb05eb..a94626164d 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/ReportingService/FieldReference.cs +++ b/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) { 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; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs index ce9eef915d..be798add86 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs @@ -6,22 +6,34 @@ using System.Drawing; using ICSharpCode.Reports.Core.BaseClasses; using ICSharpCode.Reports.Core.Events; using ICSharpCode.Reports.Core.Exporter; +using ICSharpCode.Reports.Expressions.ReportingLanguage; namespace ICSharpCode.Reports.Core.Interfaces { /// /// Description of IItemConverter. /// - public interface IBaseConverter - { - ExporterCollection Convert (BaseReportItem parent,BaseReportItem item); + /// + public interface IRenderer + { event EventHandler PageFull; event EventHandler 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); + } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractDataRenderer.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractDataRenderer.cs index 2e7c466ce8..9b29439419 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractDataRenderer.cs +++ b/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); - currentPosition =PrintHelper.ConvertRectangleToCurentPosition (r); - -// currentPosition = new Point(parent.Location.X + row.Location.X,currentPosition.Y); + currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r); tableContainer.Location = saveLocation; Console.WriteLine("----"); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs index 4110d2b498..fc3cf14635 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs @@ -155,12 +155,19 @@ namespace ICSharpCode.Reports.Core { rpea.PrintPageEventArgs.HasMorePages = false; return; } - + ITableContainer tableContainer = base.CurrentSection.Items[0] as ITableContainer; + IBaseRenderer r = PrintRendererFactory.CreateRenderer(base.CurrentSection.Items[0],nav,base.SinglePage,base.Layout,CurrentSection); + if ( r != null) { +// r.Render(tableContainer,rpea,Evaluator); + } + + // branch to render table's etc if (tableContainer != null) { + tableContainer.DataNavigator = nav; tableContainer.Parent = base.CurrentSection; if (rpea.SinglePage.PageNumber == 1) { @@ -175,7 +182,8 @@ namespace ICSharpCode.Reports.Core { this.ReportDocument.DetailsDone = true; } - else { + else + { // first element 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; rpea.LocationAfterDraw = new Point (rpea.LocationAfterDraw.X, diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderTable.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderTable.cs new file mode 100644 index 0000000000..69f0e25611 --- /dev/null +++ b/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 +{ + /// + /// Description of RenderTable. + /// + 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 PageFull; + + public event EventHandler 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; } + } + + } +} diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RendererFactory.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RendererFactory.cs new file mode 100644 index 0000000000..44668b4d5e --- /dev/null +++ b/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 +{ + /// + /// Description of RendererFactory. + /// + 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; + } + } +} From d1af7f6f0917b9eedb14120ee333ff2fe86518a2 Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Mon, 11 Oct 2010 20:22:53 +0200 Subject: [PATCH 12/15] Images in Report --- .../Project/BaseItems/Graphics/BaseImageItem.cs | 8 ++------ .../IntegrationTests/AggregateFunctionsFixture.cs | 10 ++++++++++ .../ReportingLanguage/TestHelper.cs | 4 ---- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/Graphics/BaseImageItem.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/Graphics/BaseImageItem.cs index a79f42b2c4..b51eaa3850 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/Graphics/BaseImageItem.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/Graphics/BaseImageItem.cs @@ -171,13 +171,9 @@ namespace ICSharpCode.Reports.Core { } - public string DBValue { - get{throw new NotImplementedException();} - set{throw new NotImplementedException();} - } - - + public string DBValue {get;set;} + public virtual string ImageFileName { get { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs index 4615213db2..b98875c072 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs +++ b/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 + + #region test + private void settest () + { + + } + + #endregion + + [TestFixtureSetUp] public void Init() { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/TestHelper.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/TestHelper.cs index 8f801a6002..ab0d1a48ba 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/TestHelper.cs +++ b/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.ReportFileName =@"c:\testreports\SharpTestReport.srd"; p.ExecutionTime = new DateTime(2009,12,24,23,59,59); - return p; } - - - } } From f259ef2f7fffe96adff7f8d73075ecd1a9fde3f3 Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Sun, 17 Oct 2010 20:10:51 +0200 Subject: [PATCH 13/15] Cleanup --- .../ReportLayout/AbstractLayout.cs | 32 +++-------- .../ReportWizard/ReportLayout/ListLayout.cs | 24 +++------ .../ReportWizard/ReportLayout/TableLayout.cs | 20 ++++--- .../Project/BaseClasses/Printing/Layouter.cs | 14 ++--- .../BaseClasses/Printing/PrintHelper.cs | 2 +- .../Project/Exporter/BasePager.cs | 2 +- .../Exporter/Converters/BaseConverter.cs | 16 +++--- .../Converters/GroupedRowConverter.cs | 54 ++++++++++++++----- .../Converters/GroupedTableConverter.cs | 6 +-- .../Project/Globals/GlobalValues.cs | 7 +-- 10 files changed, 86 insertions(+), 91 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs index 9a89d5ed5a..181e4e4f06 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs @@ -98,8 +98,8 @@ namespace ICSharpCode.Reports.Addin.ReportWizard ICSharpCode.Reports.Core.BaseRowItem row = new ICSharpCode.Reports.Core.BaseRowItem(); AdjustContainer(parent,row); - - int defY = parent.Location.Y + GlobalValues.ControlMargins.Top; + + int defY = GlobalValues.ControlMargins.Top; int ctrlWidth = CalculateControlWidth(row,colDetail); int startX = parent.Location.X + GlobalValues.ControlMargins.Left; @@ -134,34 +134,18 @@ namespace ICSharpCode.Reports.Addin.ReportWizard } #endregion - /* - protected static ReportItemCollection AddItemsToSection (ICSharpCode.Reports.Core.BaseSection section,ReportItemCollection items) - { - int defY = section.Location.Y + GlobalValues.ControlMargins.Top; - int ctrlWidth = CalculateControlWidth(section,items); - int startX = section.Location.X + GlobalValues.ControlMargins.Left; - var vv = new ReportItemCollection(); - foreach (var ir in items) { - Point np = new Point(startX,defY); - startX += ctrlWidth; - ir.Location = np; -// section.Items.Add(ir); - vv.Add(ir); - } - return vv; - } - */ + protected ReportItemCollection AddItemsToContainer (ReportItemCollection items) { - int locationY = 10; - int locationX = this.ParentItem.Location.X + GlobalValues.ControlMargins.Left; + int locationX = GlobalValues.ControlMargins.Left; + var minCtrlWidth = CalculateControlWidth(ParentItem,items); var col = new ReportItemCollection(); foreach (var ir in items) { - ir.Location = new Point(locationX,locationY); + ir.Location = new Point(locationX,GlobalValues.ControlMargins.Top); col.Add(ir); locationX += minCtrlWidth; } @@ -184,13 +168,13 @@ namespace ICSharpCode.Reports.Addin.ReportWizard dataItem.ColumnName = ReportModel.ReportSettings.GroupColumnsCollection[0].ColumnName; dataItem.DataType = ReportModel.ReportSettings.GroupColumnsCollection[0].DataTypeName; - dataItem.Location = new Point (10,5); + 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,30); + groupHeader.Size = new Size (300,dataItem.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom); groupHeader.Items.Add(dataItem); return groupHeader; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs index e691758393..f70730169f 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs @@ -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); } @@ -44,32 +45,23 @@ namespace ICSharpCode.Reports.Addin.ReportWizard if (section == null) { throw new ArgumentNullException("section"); } - + if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) { - var groupheader = base.CreateGroupHeader(new Point (5,10)); + 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,100); - } - - if (base.ParentItem != null) { - var items = base.AddItemsToContainer(this.reportItems); - ParentItem.Items.AddRange(items); - ParentItem.Size = new Size(ParentItem.Size.Width,40); - section.Items.Add(ParentItem as BaseReportItem); - } - else - { - //var items1 = AddItemsToSection (base.ReportModel.DetailSection,this.reportItems); - //AddItemsToSection (base.ReportModel.DetailSection,this.reportItems); - //section.Items.AddRange(items1); + section.Size = new Size(section.Size.Width,90); } + 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 diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs index 2e7ee955bb..d703c69ca9 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs @@ -57,15 +57,17 @@ namespace ICSharpCode.Reports.Addin.ReportWizard 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 = AbstractLayout.CalculateControlWidth(detailRow,reportItems); - int startX = detailRow.Location.X + margin.Left; + int startX = margin.Left; foreach (ICSharpCode.Reports.Core.BaseReportItem ir in this.reportItems) { @@ -76,26 +78,22 @@ namespace ICSharpCode.Reports.Addin.ReportWizard detailRow.Items.Add(ir); } - insertLocation = new Point(margin.Left,insertLocation.Y + detailRow.Size.Height + margin.Bottom + margin.Top); - ParentItem.Items.Add (detailRow); - - ParentItem.Size = CalculateContainerSize(ParentItem,margin); - + ParentItem.Size = CalculateContainerSize(ParentItem); section.Size = new Size (section.Size.Width,ParentItem.Size.Height + margin.Top + margin.Bottom); - } - private Size CalculateContainerSize(ISimpleContainer container,System.Drawing.Printing.Margins margin) + private Size CalculateContainerSize(ISimpleContainer container) { - int h = margin.Top; + int h = GlobalValues.ControlMargins.Top; foreach (ICSharpCode.Reports.Core.BaseReportItem item in container.Items) { - h = h + item.Size.Height + margin.Bottom; + h = h + item.Size.Height + GlobalValues.ControlMargins.Bottom; } - h = h + 3*margin.Bottom; + h = h + 3*GlobalValues.ControlMargins.Bottom; + return new Size (container.Size.Width,h); } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/Layouter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/Layouter.cs index 85e01eb9e0..9e38e5336c 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/Layouter.cs +++ b/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 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 throw new ArgumentNullException("section"); } + Console.WriteLine("layouter for {0}",section.Name); IEnumerable 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) { - //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; diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs index 2c472cb13d..6f44c4da66 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs +++ b/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); 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); } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs index 1304a07bcb..b01242f60b 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs @@ -123,7 +123,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); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs index 7732655d62..5724e21f70 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs @@ -112,12 +112,17 @@ namespace ICSharpCode.Reports.Core.Exporter protected Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition) { + Console.WriteLine("---start --ConvertStandardRow {0} - section {1}",simpleContainer.Size,section.Size); PrepareContainerForConverting(section,simpleContainer); Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); - AfterConverting (mylist); + Console.WriteLine("---end --ConvertStandardRow detail {0} - section {1}",simpleContainer.Size,section.Size); +// Console.WriteLine(); +// Console.WriteLine(); + AfterConverting (section,mylist); return curPos; } + protected bool PageBreakAfterGroupChange(ISimpleContainer container) { var groupedRows = BaseConverter.FindGroups(container); @@ -179,7 +184,7 @@ namespace ICSharpCode.Reports.Core.Exporter #endregion - protected void SaveSize(Size size) + protected void SaveSectionSize(Size size) { this.saveSize = size; } @@ -206,11 +211,10 @@ namespace ICSharpCode.Reports.Core.Exporter } - protected void AfterConverting (ExporterCollection convertedList) + protected void AfterConverting (BaseSection section,ExporterCollection convertedList) { StandardPrinter.EvaluateRow(Evaluator,convertedList); -// section.Items[0].Size = base.RestoreSize; -// section.SectionOffset += section.Size.Height + 3 * GlobalValues.GapBetweenContainer; + section.Items[0].Size = RestoreSize; } @@ -219,7 +223,7 @@ namespace ICSharpCode.Reports.Core.Exporter FillRow(simpleContainer); PrepareContainerForConverting(section,simpleContainer); Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); - AfterConverting (mylist); + AfterConverting (section,mylist); return curPos; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs index c1c07d7843..15171c6dc3 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs @@ -58,40 +58,69 @@ namespace ICSharpCode.Reports.Core.Exporter BaseSection section = parent as BaseSection; int defaultLeftPos = parent.Location.X; - + + Size groupSize = Size.Empty; + Size childSize = Size.Empty; + + if (section.Items.IsGrouped) + { + groupSize = section.Items[0].Size; + childSize = 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,defaultLeftPos,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 { + 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; + + childNavigator.Fill(simpleContainer.Items); currentPosition = ConvertGroupChilds (exporterCollection,section, simpleContainer,defaultLeftPos,currentPosition); pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],currentPosition); - + section.Items[1].Size = base.RestoreSize; if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds )) { currentPosition = ForcePageBreak (exporterCollection,section); } @@ -113,6 +142,7 @@ namespace ICSharpCode.Reports.Core.Exporter { // No Grouping at all currentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); + section.Size = base.RestoreSize; } pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],currentPosition); @@ -138,7 +168,7 @@ namespace ICSharpCode.Reports.Core.Exporter base.ForcePageBreak(exporterCollection,section); return CalculateStartPosition(); } - + private Point CalculateStartPosition() { @@ -160,14 +190,14 @@ namespace ICSharpCode.Reports.Core.Exporter StandardPrinter.EvaluateRow(base.Evaluator,list); exportList.AddRange(list); - AfterConverting (list); + AfterConverting (section,list); retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer)); } else { retVal = ConvertStandardRow(exportList,section,groupedRows[0],leftPos,offset); } return retVal; } - + private static void ShouldDrawBorder (BaseSection section,ExporterCollection list) { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs index eb0f01e465..4cfb48edcc 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs @@ -69,7 +69,7 @@ namespace ICSharpCode.Reports.Core.Exporter simpleContainer.Location = new Point (simpleContainer.Location.X,simpleContainer.Location.Y); simpleContainer.Parent = (BaseReportItem)this.table; - base.SaveSize( new Size (simpleContainer.Size.Width,simpleContainer.Size.Height)); + base.SaveSectionSize( new Size (simpleContainer.Size.Width,simpleContainer.Size.Height)); if (PrintHelper.IsTextOnlyRow(simpleContainer) ) { headerRow = simpleContainer; @@ -136,7 +136,7 @@ namespace ICSharpCode.Reports.Core.Exporter { // No Grouping at all - base.SaveSize(simpleContainer.Size); + base.SaveSectionSize(simpleContainer.Size); simpleContainer = table.Items[1] as ISimpleContainer; do { @@ -191,7 +191,7 @@ namespace ICSharpCode.Reports.Core.Exporter StandardPrinter.EvaluateRow(base.Evaluator,list); exportList.AddRange(list); - AfterConverting (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); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Globals/GlobalValues.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Globals/GlobalValues.cs index 4544bdb3e5..84dd7863f6 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Globals/GlobalValues.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Globals/GlobalValues.cs @@ -95,12 +95,7 @@ namespace ICSharpCode.Reports.Core { /// /// The value on witch the Control is drawing bigger than the text inside /// - /* - public static int EnlargeControl - { - get {return enlargeControl;} - } - */ + public static Margins ControlMargins { From fb08d668569c0a71e103d8052da9b5e09111f027 Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Tue, 19 Oct 2010 20:36:19 +0200 Subject: [PATCH 14/15] ReportFooter --- .../Project/Exporter/BasePager.cs | 4 -- .../Exporter/Converters/BaseConverter.cs | 9 +-- .../Converters/GroupedRowConverter.cs | 59 ++++++++++++------- .../Converters/GroupedTableConverter.cs | 35 ++++++----- .../Project/Exporter/DataPageBuilder.cs | 16 +++-- .../Project/Interfaces/IItemConverter.cs | 3 +- 6 files changed, 71 insertions(+), 55 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs index b01242f60b..8d55b25d86 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs @@ -94,10 +94,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); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs index 5724e21f70..ffa43e9767 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs @@ -112,12 +112,8 @@ namespace ICSharpCode.Reports.Core.Exporter protected Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition) { - Console.WriteLine("---start --ConvertStandardRow {0} - section {1}",simpleContainer.Size,section.Size); PrepareContainerForConverting(section,simpleContainer); Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); - Console.WriteLine("---end --ConvertStandardRow detail {0} - section {1}",simpleContainer.Size,section.Size); -// Console.WriteLine(); -// Console.WriteLine(); AfterConverting (section,mylist); return curPos; } @@ -156,7 +152,9 @@ namespace ICSharpCode.Reports.Core.Exporter return new ExporterCollection();; } + public Point CurrentPosition {get;set;} + #endregion public Rectangle ParentRectangle { get { return parentRectangle; } } @@ -181,7 +179,7 @@ namespace ICSharpCode.Reports.Core.Exporter } public Graphics Graphics {get;set;} - #endregion + protected void SaveSectionSize(Size size) @@ -214,7 +212,6 @@ namespace ICSharpCode.Reports.Core.Exporter protected void AfterConverting (BaseSection section,ExporterCollection convertedList) { StandardPrinter.EvaluateRow(Evaluator,convertedList); - section.Items[0].Size = RestoreSize; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs index 15171c6dc3..3fc01122cd 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs @@ -23,6 +23,7 @@ namespace ICSharpCode.Reports.Core.Exporter { } + public override ExporterCollection Convert(BaseReportItem parent, BaseReportItem item) { if (parent == null) { @@ -54,7 +55,7 @@ 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; @@ -62,10 +63,19 @@ namespace ICSharpCode.Reports.Core.Exporter 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; @@ -83,7 +93,7 @@ namespace ICSharpCode.Reports.Core.Exporter base.Evaluator.SinglePage.IDataNavigator = childNavigator; - currentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,currentPosition); + base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,base.CurrentPosition); section.Size = base.RestoreSize; section.Items[0].Size = groupSize; @@ -92,12 +102,12 @@ namespace ICSharpCode.Reports.Core.Exporter 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(); + 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) { @@ -105,11 +115,10 @@ namespace ICSharpCode.Reports.Core.Exporter 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(); + 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; @@ -117,12 +126,12 @@ namespace ICSharpCode.Reports.Core.Exporter childNavigator.Fill(simpleContainer.Items); - currentPosition = ConvertGroupChilds (exporterCollection,section, - simpleContainer,defaultLeftPos,currentPosition); - pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],currentPosition); - section.Items[1].Size = base.RestoreSize; + 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 )) { - currentPosition = ForcePageBreak (exporterCollection,section); + base.CurrentPosition = ForcePageBreak (exporterCollection,section); } } while ( childNavigator.MoveNext()); @@ -131,7 +140,7 @@ namespace ICSharpCode.Reports.Core.Exporter if ( base.DataNavigator.HasMoreData) { - currentPosition = ForcePageBreak (exporterCollection,section); + base.CurrentPosition = ForcePageBreak (exporterCollection,section); } } @@ -141,14 +150,19 @@ namespace ICSharpCode.Reports.Core.Exporter 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)) { - currentPosition= ForcePageBreak (exporterCollection,section); + base.CurrentPosition = ForcePageBreak (exporterCollection,section); } ShouldDrawBorder (section,exporterCollection); @@ -159,6 +173,7 @@ namespace ICSharpCode.Reports.Core.Exporter section.Location.Y + section.Size.Height, SectionBounds.ReportFooterRectangle.Width, SectionBounds.ReportFooterRectangle.Height); + return exporterCollection; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs index 4cfb48edcc..903c9795e6 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs @@ -49,12 +49,11 @@ namespace ICSharpCode.Reports.Core.Exporter BaseSection section = table.Parent as BaseSection; - Point currentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.table.Parent,this.table).Location.X, + base.CurrentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.table.Parent,this.table).Location.X, base.SectionBounds.DetailStart.Y); + int defaultLeftPos = base.CurrentPosition.X; - int defaultLeftPos = currentPosition.X; - - Point dataAreaStart = new Point(table.Items[0].Location.X,table.Items[0].Location.Y + currentPosition.Y); + Point dataAreaStart = new Point(table.Items[0].Location.X,table.Items[0].Location.Y + base.CurrentPosition.Y); ISimpleContainer headerRow = null; Rectangle pageBreakRect = Rectangle.Empty; @@ -73,7 +72,7 @@ namespace ICSharpCode.Reports.Core.Exporter if (PrintHelper.IsTextOnlyRow(simpleContainer) ) { headerRow = simpleContainer; - currentPosition = BaseConverter.BaseConvert(exporterCollection,headerRow,defaultLeftPos,currentPosition); + base.CurrentPosition = BaseConverter.BaseConvert(exporterCollection,headerRow,defaultLeftPos,base.CurrentPosition); } BaseGroupedRow row = table.Items[1] as BaseGroupedRow; @@ -89,7 +88,7 @@ namespace ICSharpCode.Reports.Core.Exporter base.Evaluator.SinglePage.IDataNavigator = childNavigator; // Convert Grouping Header - currentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,currentPosition); + base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,base.CurrentPosition); childNavigator.Reset(); childNavigator.MoveNext(); @@ -103,15 +102,15 @@ namespace ICSharpCode.Reports.Core.Exporter childNavigator.Fill(simpleContainer.Items); - currentPosition = ConvertGroupChilds (exporterCollection, + base.CurrentPosition = ConvertGroupChilds (exporterCollection, section, - simpleContainer,defaultLeftPos,currentPosition); - pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,currentPosition); + simpleContainer,defaultLeftPos,base.CurrentPosition); + pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,base.CurrentPosition); if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) { - currentPosition = base.ForcePageBreak(exporterCollection,section); - currentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,currentPosition); + base.CurrentPosition = base.ForcePageBreak(exporterCollection,section); + base.CurrentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,base.CurrentPosition); } } while ( childNavigator.MoveNext()); @@ -120,8 +119,8 @@ namespace ICSharpCode.Reports.Core.Exporter { if ( base.DataNavigator.HasMoreData) { - currentPosition = base.ForcePageBreak(exporterCollection,section); - currentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,currentPosition); + base.CurrentPosition = base.ForcePageBreak(exporterCollection,section); + base.CurrentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,base.CurrentPosition); } } @@ -143,15 +142,15 @@ namespace ICSharpCode.Reports.Core.Exporter PrintHelper.AdjustSectionLocation(section); - pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,currentPosition); + pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,base.CurrentPosition); if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) { - currentPosition = base.ForcePageBreak(exporterCollection,section); - currentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,currentPosition); + base.CurrentPosition = base.ForcePageBreak(exporterCollection,section); + base.CurrentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,base.CurrentPosition); } - currentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); + base.CurrentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,base.CurrentPosition); simpleContainer.Size = base.RestoreSize; } @@ -160,7 +159,7 @@ namespace ICSharpCode.Reports.Core.Exporter base.DataNavigator.Reset(); base.DataNavigator.MoveNext(); SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left, - currentPosition.Y, + base.CurrentPosition.Y, SectionBounds.ReportFooterRectangle.Width, SectionBounds.ReportFooterRectangle.Height); } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs index 4bbd62ce98..96fe2d46ca 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs @@ -103,8 +103,9 @@ namespace ICSharpCode.Reports.Core.Exporter base.SinglePage.Items.AddRange(convertedList); } - - protected void BuildDetail (BaseSection section,IDataNavigator dataNavigator) + + + protected Point BuildDetail (BaseSection section,IDataNavigator dataNavigator) { ExporterCollection convertedList = new ExporterCollection(); @@ -124,8 +125,10 @@ namespace ICSharpCode.Reports.Core.Exporter convertedList = baseConverter.Convert(section,item); base.SinglePage.Items.AddRange(convertedList); + return baseConverter.CurrentPosition; } } + return Point.Empty; } @@ -145,10 +148,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); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs index be798add86..f0b83acd81 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs @@ -34,6 +34,7 @@ namespace ICSharpCode.Reports.Core.Interfaces public interface IBaseConverter:IRenderer { - ExporterCollection Convert (BaseReportItem parent,BaseReportItem item); + ExporterCollection Convert (BaseReportItem parent,BaseReportItem item); + Point CurrentPosition {get;set;} } } From 8cd63bdca9c4e668655580fa7374b57cca10f10c Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Wed, 20 Oct 2010 20:26:14 +0200 Subject: [PATCH 15/15] Pagenumbering, cleanup in BasePager.cs - Final step's --- .../Project/Exporter/BasePager.cs | 76 ++++++++----------- .../Project/Exporter/DataPageBuilder.cs | 3 +- 2 files changed, 32 insertions(+), 47 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs index 8d55b25d86..8810143d3a 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs @@ -15,11 +15,8 @@ namespace ICSharpCode.Reports.Core.Exporter /// 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 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 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 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 @@ -179,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) { @@ -218,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) @@ -228,11 +223,12 @@ namespace ICSharpCode.Reports.Core.Exporter { } - } } } + #endregion + #region Event's @@ -268,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 { @@ -297,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 } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs index 96fe2d46ca..9ec1e833ba 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs +++ b/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(); - internal delegate ExporterCollection ConverterDelegate (BaseSection s); + //internal delegate ExporterCollection ConverterDelegate (BaseSection s); #region Constructor @@ -50,7 +50,6 @@ namespace ICSharpCode.Reports.Core.Exporter protected override void BuildNewPage () { base.BuildNewPage(); - this.BuildReportHeader(); this.BuildPageHeader(); }