From e7754bea338a08469a14d87e2949530537a76337 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Wed, 24 Feb 2010 19:17:28 +0000 Subject: [PATCH] PageHeader (Preview and ReportViewer) Designer: Use FakeImage in DesignView if Icons are read from DataBase git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@5532 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/ReportItems/BaseImageItem.cs | 19 ++++++++ .../BaseClasses/Printing/PrintHelper.cs | 9 ++++ .../Project/BaseItems/BaseTableItem.cs | 47 +++++++++++-------- .../Exporter/Converters/BaseConverter.cs | 9 ---- .../Exporter/Converters/RowConverter.cs | 2 +- .../Exporter/Converters/TableConverter.cs | 2 +- .../Project/Interfaces/IContainerItem.cs | 1 + .../Project/Printing/AbstractRenderer.cs | 10 ---- .../Project/Printing/RenderDataReport.cs | 7 ++- 9 files changed, 64 insertions(+), 42 deletions(-) diff --git a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Addin/Project/ReportItems/BaseImageItem.cs b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Addin/Project/ReportItems/BaseImageItem.cs index 48b2e2fa53..9c69862b98 100644 --- a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Addin/Project/ReportItems/BaseImageItem.cs +++ b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Addin/Project/ReportItems/BaseImageItem.cs @@ -95,6 +95,22 @@ namespace ICSharpCode.Reports.Addin } + private static Bitmap FakeImage(Size size) + { + Bitmap b = new Bitmap (size.Width,size.Height); + using (Graphics g = Graphics.FromImage (b)){ + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.DrawRectangle (new Pen(Color.Black, 1), + 1,1,size.Width -2,size.Height -2); + + g.DrawString("",GlobalValues.DefaultFont, + new SolidBrush(Color.Gray), + new RectangleF(2,2,size.Width,size.Height) ); + } + return b; + } + + private Image LoadImage () { try { @@ -120,6 +136,9 @@ namespace ICSharpCode.Reports.Addin [XmlIgnoreAttribute] public Image Image { get { + if (this.imageSource == GlobalEnums.ImageSource.Database ) { + this.image = FakeImage(base.Size); + } if (this.image != null) { return image; } else { diff --git a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs index 766ff66dff..a0d40eaa4a 100644 --- a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs +++ b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs @@ -117,6 +117,15 @@ namespace ICSharpCode.Reports.Core } } + + public static bool IsPageFull (Rectangle rectangle,SectionBounds bounds) + { + if (rectangle.Bottom > bounds.PageFooterRectangle.Top) { + return true; + } + return false; + } + #region Debug Code diff --git a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/BaseItems/BaseTableItem.cs b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/BaseItems/BaseTableItem.cs index 4e03d4fb0d..8c9e17034e 100644 --- a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/BaseItems/BaseTableItem.cs +++ b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/BaseItems/BaseTableItem.cs @@ -22,7 +22,7 @@ namespace ICSharpCode.Reports.Core { private SectionBounds sectionBounds; private IDataNavigator dataNavigator; private IExpressionEvaluatorFacade expressionEvaluatorFacade; -// private ISinglePage singlePage; + private BaseSection startSection; private ILayouter layouter; @@ -86,14 +86,13 @@ namespace ICSharpCode.Reports.Core { } // Point saveLocation = this.Location; - Point currentPosition = new Point(this.SectionBounds.DetailStart.X,rpea.LocationAfterDraw.Y); - +// Point currentPosition = new Point(this.SectionBounds.DetailStart.X,rpea.LocationAfterDraw.Y); + Point currentPosition = new Point(this.startSection.Location.X,rpea.LocationAfterDraw.Y); Point tableStart = currentPosition; base.Render(rpea); - int defaultLeftPos = PrintHelper.DrawingAreaRelativeToParent(this.Parent,this).Left; this.Items.SortByLocation(); - + rpea.SinglePage.StartRow = this.dataNavigator.CurrentRow; foreach (BaseRowItem row in this.items) { if (row != null) @@ -101,22 +100,21 @@ namespace ICSharpCode.Reports.Core { row.Parent = this; if (PrintHelper.IsTextOnlyRow(row) ) { - currentPosition = this.PrintRow (rpea,row,currentPosition,defaultLeftPos); + currentPosition = this.PrintTextRow (rpea,row,defaultLeftPos,currentPosition); this.Location = saveLocation; } else { do { - if (AbstractRenderer.IsPageFull(new Rectangle(currentPosition,row.Size),sectionBounds)) { + if (PrintHelper.IsPageFull(new Rectangle(currentPosition,row.Size),sectionBounds)) { this.Location = saveLocation; + + rpea.SinglePage.EndRow = this.dataNavigator.CurrentRow; AbstractRenderer.PageBreak(rpea); return; } - currentPosition = this.PrintRow (rpea,row,currentPosition,defaultLeftPos); - + currentPosition = this.PrintDataRow (rpea,row,defaultLeftPos,currentPosition); } while (this.dataNavigator.MoveNext()); - this.dataNavigator.Reset(); - this.dataNavigator.MoveNext(); } } } @@ -131,28 +129,30 @@ namespace ICSharpCode.Reports.Core { } - private Point PrintRow (ReportPageEventArgs rpea,BaseRowItem row,Point drawAt, int leftX) + private Point PrintTextRow(ReportPageEventArgs rpea,BaseRowItem row,int left,Point currentPos ) { - int extend = row.Size.Height - row.Items[0].Size.Height; Rectangle saveRec = new Rectangle (row.Location,row.Size); - row.Location = new Point (leftX,drawAt.Y); - - this.dataNavigator.Fill(row.Items); + row.Location = new Point (left,currentPos.Y); EvaluateRecursive (this.expressionEvaluatorFacade,row.Items); - PrintHelper.SetLayoutForRow(rpea.PrintPageEventArgs.Graphics,layouter,row); - row.Render (rpea); - Point retVal = new Point (leftX,drawAt.Y + row.Size.Height +10); + Point retVal = new Point (left,currentPos.Y + row.Size.Height +10); //reset values row.Size = new Size(saveRec.Size.Width,saveRec.Size.Height); row.Location = saveRec.Location; - return retVal; } + private Point PrintDataRow (ReportPageEventArgs rpea,BaseRowItem row,int left,Point currentPos) + { + this.dataNavigator.Fill(row.Items); + return this.PrintTextRow(rpea,row,left,currentPos); + } + + + public override string ToString(){ return this.GetType().Name; } @@ -166,6 +166,13 @@ namespace ICSharpCode.Reports.Core { #region Interface implementation of 'ITableContainer' + public void StartLayoutAt (BaseSection section) + { + if (section == null) { + throw new ArgumentNullException("section"); + } + this.startSection = section; + } public void RenderTable (BaseReportItem parent,SectionBounds sectionBounds,ReportPageEventArgs rpea,ILayouter layouter) { diff --git a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs index 4deba653ac..3838901c4e 100644 --- a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs +++ b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs @@ -55,15 +55,6 @@ namespace ICSharpCode.Reports.Core.Exporter } - protected bool IsPageFull (Rectangle rectangle) - { - if (rectangle.Bottom > SectionBounds.PageFooterRectangle.Top) { - return true; - } - return false; - } - - protected void FirePageFull (ExporterCollection items) { EventHelper.Raise(PageFull,this,new NewPageEventArgs(items)); diff --git a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/RowConverter.cs b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/RowConverter.cs index a8dd4338f0..b460c2995e 100644 --- a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/RowConverter.cs +++ b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/RowConverter.cs @@ -76,7 +76,7 @@ namespace ICSharpCode.Reports.Core.Exporter Rectangle r = new Rectangle(section.Location.X,section.SectionOffset, section.Size.Width,section.Size.Height); - if (base.IsPageFull(r)) { + if (PrintHelper.IsPageFull(r,base.SectionBounds)) { base.FirePageFull(mylist); section.SectionOffset = base.SinglePage.SectionBounds.PageHeaderRectangle.Location.Y; mylist.Clear(); diff --git a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs index 2ce35a0cd2..2292851299 100644 --- a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs +++ b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs @@ -81,7 +81,7 @@ namespace ICSharpCode.Reports.Core.Exporter PrintHelper.SetLayoutForRow(base.Graphics,base.Layouter,row); - if (this.IsPageFull(new Rectangle(new Point (row.Location.X,currentPosition.Y),row.Size))) { + if (PrintHelper.IsPageFull(new Rectangle(new Point (row.Location.X,currentPosition.Y),row.Size),base.SectionBounds)) { base.FirePageFull(mylist); mylist.Clear(); currentPosition = PrintTableHeader(mylist,headerRow, diff --git a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Interfaces/IContainerItem.cs b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Interfaces/IContainerItem.cs index ba802523d7..69a9b6741b 100644 --- a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Interfaces/IContainerItem.cs +++ b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Interfaces/IContainerItem.cs @@ -26,6 +26,7 @@ namespace ICSharpCode.Reports.Core.Interfaces { IDataNavigator DataNavigator {set;} IExpressionEvaluatorFacade ExpressionEvaluatorFacade {set;} + void StartLayoutAt (BaseSection section); void RenderTable (BaseReportItem parent, SectionBounds sectionBounds, ReportPageEventArgs rpea,ILayouter layouter); } } diff --git a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Printing/AbstractRenderer.cs b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Printing/AbstractRenderer.cs index 8b3250c3e0..6ec64049aa 100644 --- a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Printing/AbstractRenderer.cs +++ b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Printing/AbstractRenderer.cs @@ -197,16 +197,6 @@ namespace ICSharpCode.Reports.Core } - - public static bool IsPageFull (Rectangle rectangle,SectionBounds bounds) - { - if (rectangle.Bottom > bounds.PageFooterRectangle.Top) { - return true; - } - return false; - } - - protected void PrintNoDataMessage(PrintPageEventArgs e) { if (e == null) { diff --git a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs index ed938b1507..ff4681266e 100644 --- a/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs +++ b/src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs @@ -157,6 +157,11 @@ namespace ICSharpCode.Reports.Core { tableContainer.DataNavigator = nav; tableContainer.Parent = base.CurrentSection; tableContainer.ExpressionEvaluatorFacade = base.ExpressionFassade; + if (rpea.SinglePage.PageNumber == 1) { + tableContainer.StartLayoutAt(base.Sections[2]); + } else { + tableContainer.StartLayoutAt(base.Sections[1]); + } tableContainer.RenderTable(base.CurrentSection,this.SectionBounds,rpea,this.Layout); this.ReportDocument.DetailsDone = true; @@ -183,7 +188,7 @@ namespace ICSharpCode.Reports.Core { base.CurrentSection.Size.Height); - if (AbstractRenderer.IsPageFull(sectionRect,base.SectionBounds)) { + if (PrintHelper.IsPageFull(sectionRect,base.SectionBounds)) { AbstractRenderer.PageBreak(rpea); this.RemoveSectionEvents(); return;