diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseDataItem.cs b/src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseDataItem.cs index 647d0832d9..6c341b216a 100644 --- a/src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseDataItem.cs +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseDataItem.cs @@ -14,7 +14,7 @@ using System.Drawing; using System.ComponentModel; using System.Xml.Serialization; -using SharpReportCore; +using SharpReportCore.Exporters; /// @@ -25,7 +25,8 @@ using SharpReportCore; /// created on - 22.08.2005 00:12:59 /// namespace SharpReportCore { - public class BaseDataItem : SharpReportCore.BaseTextItem,IItemRenderer { + public class BaseDataItem : SharpReportCore.BaseTextItem,IItemRenderer, + IExportColumnBuilder { private string columnName; private string baseTableName; @@ -48,6 +49,7 @@ namespace SharpReportCore { #endregion #region privates + //TODO Need a much better handling for 'null' values private string CheckForNullValue() { @@ -63,6 +65,21 @@ namespace SharpReportCore { #endregion + #region IExportColumnBuilder implementation +// public new IPerformLine CreateExportColumn(Graphics graphics) + public new BaseExportColumn CreateExportColumn(Graphics graphics) + { + string toPrint = CheckForNullValue(); + BaseStyleDecorator st = base.CreateItemStyle(graphics); + ExportText item = new ExportText(st,false); + item.Text = base.FormatOutput(toPrint, + this.FormatString, + DataTypeHelper.TypeCodeFromString (this.dataType), + this.nullValue); + return item; + } + + #endregion public override void Render(SharpReportCore.ReportPageEventArgs rpea) { diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseTextItem.cs b/src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseTextItem.cs index 9d61a929ff..4a31c9ecfe 100644 --- a/src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseTextItem.cs +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseTextItem.cs @@ -12,7 +12,7 @@ using System.Drawing; using System.ComponentModel; using System.Xml.Serialization; -using SharpReportCore; +using SharpReportCore.Exporters; /// /// This class is the BaseClass for all TextBased Items @@ -22,15 +22,16 @@ using SharpReportCore; namespace SharpReportCore { - public class BaseTextItem : SharpReportCore.BaseReportItem,IItemRenderer { + public class BaseTextItem : SharpReportCore.BaseReportItem,IItemRenderer,IExportColumnBuilder { private string text; private string formatString = String.Empty; private StringFormat stringFormat; private StringTrimming stringTrimming; - private TextDrawer textDrawer; -// private StandardFormatter standartFormatter; private ContentAlignment contentAlignment; + + private TextDrawer textDrawer; + private RectangleShape shape = new RectangleShape(); #region Constructor @@ -44,6 +45,48 @@ namespace SharpReportCore { #endregion + #region IExportColumnBuilder implementation + +// public IPerformLine CreateExportColumn(Graphics graphics){ + public BaseExportColumn CreateExportColumn(Graphics graphics){ + BaseStyleDecorator st = this.CreateItemStyle(graphics); +// TextDecorator st = (TextDecorator)this.CreateItemStyle(graphics); + ExportText item = new ExportText(st,false); + + item.Text = this.text; + return item; + } + + #endregion + + #region IExportColumnBuilder implementation + + protected BaseStyleDecorator CreateItemStyle (Graphics g) { + BaseStyleDecorator style = new BaseStyleDecorator(); +// TextStyleDecorator style = new TextStyleDecorator(); + SizeF measureSizeF = new SizeF (); + measureSizeF = g.MeasureString(text, + this.Font, + this.Size.Width, + this.stringFormat); + RectangleF rect = base.DrawingRectangle (measureSizeF); + + style.BackColor = this.BackColor; + style.Font = this.Font; + style.ForeColor = this.ForeColor; + style.Location = this.Location; + style.Size = this.Size; + style.DrawBorder = this.DrawBorder; + + style.StringFormat = this.stringFormat; + style.StringTrimming = this.stringTrimming; + style.ContentAlignment = this.contentAlignment; + + return style; + } + + #endregion + protected string FormatOutput(string valueToFormat,string format, TypeCode typeCode, string nullValue ){ diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/RowItem.cs b/src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/RowItem.cs index dc19f7aca9..465c3645f2 100644 --- a/src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/RowItem.cs +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/RowItem.cs @@ -13,13 +13,14 @@ using System.Drawing.Drawing2D; using System.ComponentModel; using System.Collections.Generic; using System.Windows.Forms; +using SharpReportCore.Exporters; namespace SharpReportCore{ /// /// Description of BaseRowItem. /// - public class RowItem:BaseReportItem,IContainerItem{ + public class RowItem:BaseReportItem,IContainerItem,IExportColumnBuilder{ private string tableName; private ReportItemCollection items; @@ -47,6 +48,29 @@ namespace SharpReportCore{ */ #region overrides + #region IExportColumnBuilder implementation + +// public IPerformLine CreateExportColumn(Graphics graphics){ + public BaseExportColumn CreateExportColumn(Graphics graphics){ + BaseStyleDecorator st = this.CreateItemStyle(graphics); + + ExportContainer item = new ExportContainer(st); + return item; + } + + protected BaseStyleDecorator CreateItemStyle (Graphics g) { + BaseStyleDecorator style = new BaseStyleDecorator(); + + style.BackColor = this.BackColor; +// style.Font = this.Font; + style.ForeColor = this.ForeColor; + style.Location = this.Location; + style.Size = this.Size; + style.DrawBorder = this.DrawBorder; + return style; + } + + #endregion protected RectangleF PrepareRectangle () { SizeF measureSize = new SizeF ((SizeF)this.Size); diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/Exceptions/MissingDataManagerException.cs b/src/AddIns/Misc/SharpReport/SharpReportCore/Exceptions/MissingDataManagerException.cs new file mode 100644 index 0000000000..b915258c3b --- /dev/null +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/Exceptions/MissingDataManagerException.cs @@ -0,0 +1,53 @@ +/* + * Created by SharpDevelop. + * User: Forstmeier Peter + * Date: 05.10.2006 + * Time: 16:05 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Runtime.Serialization; +using System.Security.Permissions; +namespace SharpReportCore { + [Serializable()] + public class MissingDataManagerException : System.Exception { + + string errorMessage = String.Empty; + + public MissingDataManagerException():base() { + + } + + public MissingDataManagerException(string errorMessage):base(errorMessage ){ + this.errorMessage = errorMessage; + } + + public MissingDataManagerException(string errorMessage, + Exception exception):base (errorMessage,exception){ + + } + + protected MissingDataManagerException(SerializationInfo info, + StreamingContext context) : base(info, context){ + // Implement type-specific serialization constructor logic. + } + public string ErrorMessage { + get { + return errorMessage; + } + } + + [SecurityPermissionAttribute(SecurityAction.Demand, + SerializationFormatter = true)] + + public override void GetObjectData(SerializationInfo info, StreamingContext context){ + if (info == null) { + throw new ArgumentNullException("info"); + } + info.AddValue("errorMessage", this.errorMessage); + base.GetObjectData(info, context); + } + } +} + diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/BaseStyleDecorator.cs b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/BaseStyleDecorator.cs new file mode 100644 index 0000000000..e94d0539ad --- /dev/null +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/BaseStyleDecorator.cs @@ -0,0 +1,129 @@ +/* + * Created by SharpDevelop. + * User: Forstmeier Helmut + * Date: 26.09.2006 + * Time: 14:33 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Drawing; + +namespace SharpReportCore.Exporters +{ + /// + /// Description of LineStyle. + /// + public class BaseStyleDecorator{ + + private bool drawBorder; + private Color backColor; + private Color foreColor; + private Point location; + private Size size; + private Font font; + + private StringFormat stringFormat; + private StringTrimming stringTrimming; + private ContentAlignment contentAlignment; + + public BaseStyleDecorator():this(Color.White,Color.Black){ + } + + public BaseStyleDecorator(Color backColor, Color foreColor) + { + this.backColor = backColor; + this.foreColor = foreColor; + } + + public bool DrawBorder { + get { + return drawBorder; + } + set { + drawBorder = value; + } + } + + public Color BackColor { + get { + return backColor; + } + set { + backColor = value; + } + } + + public Color ForeColor { + get { + return foreColor; + } + set { + foreColor = value; + } + } + + public Point Location { + get { + return location; + } + set { + location = value; + } + } + + public Size Size { + get { + return size; + } + set { + size = value; + } + } + + public Font Font { + get { + return font; + } + set { + font = value; + } + } + + public StringFormat StringFormat { + get { + return stringFormat; + } + set { + stringFormat = value; + } + } + + public StringTrimming StringTrimming { + get { + return stringTrimming; + } + set { + stringTrimming = value; + } + } + + public ContentAlignment ContentAlignment { + get { + return contentAlignment; + } + set { + contentAlignment = value; + } + } + + } + + public class TextDecorator :BaseStyleDecorator + { + TextDecorator () :base() { + + } + } +} diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/BaseExportColumn.cs b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/BaseExportColumn.cs new file mode 100644 index 0000000000..c535d8e4a0 --- /dev/null +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/BaseExportColumn.cs @@ -0,0 +1,60 @@ +/* + * Created by SharpDevelop. + * User: Forstmeier Helmut + * Date: 09.10.2006 + * Time: 09:40 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Drawing; + +namespace SharpReportCore.Exporters +{ + /// + /// Description of BaseLineItem. + /// + public class BaseExportColumn :IPerformLine + { + BaseStyleDecorator styleDecorator; + bool isContainer; + + #region Constructors + + public BaseExportColumn(){ + this.styleDecorator = new BaseStyleDecorator(Color.White,Color.Black); + } + +// public BaseExportColumn(BaseStyleDecorator styleDecorator) +// { +// this.styleDecorator = styleDecorator; +// } + + public BaseExportColumn(BaseStyleDecorator itemStyle, bool isContainer) + { + this.styleDecorator = itemStyle; + this.isContainer = isContainer; + } + + #endregion + + public virtual BaseStyleDecorator StyleDecorator { + get { + return styleDecorator; + } + set { + this.styleDecorator = value; + } + } + + public bool IsContainer { + get { + return isContainer; + } + set { + isContainer = value; + } + } + } +} diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/ExportContainer.cs b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/ExportContainer.cs new file mode 100644 index 0000000000..dd84886894 --- /dev/null +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/ExportContainer.cs @@ -0,0 +1,46 @@ +/* + * Created by SharpDevelop. + * User: Forstmeier Helmut + * Date: 09.10.2006 + * Time: 22:14 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Collections.Generic; +namespace SharpReportCore.Exporters +{ + /// + /// Description of ContainerItem. + /// + public class ExportContainer:BaseExportColumn + { +// List items; + ExporterCollection items; + public ExportContainer():base(){ + base.IsContainer = true; + } + + public ExportContainer (BaseStyleDecorator itemStyle):base(itemStyle,true){ + + } + + public void AddLineItem (BaseExportColumn item) { + if (item == null) { + throw new ArgumentNullException("item"); + } + this.items.Add(item); + } + + public ExporterCollection Items { + get { + if (this.items == null) { + items = new ExporterCollection(); + } + return items; + } + } + + } +} diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/ExportText.cs b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/ExportText.cs new file mode 100644 index 0000000000..3604849526 --- /dev/null +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/ExportText.cs @@ -0,0 +1,52 @@ +/* + * Created by SharpDevelop. + * User: Forstmeier Helmut + * Date: 26.09.2006 + * Time: 14:33 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Drawing; + +namespace SharpReportCore.Exporters { + /// + /// Description of LineItem. + /// + public class ExportText :BaseExportColumn,IPerformLine{ + string text; + + public ExportText():base(){ + } + + + public ExportText (BaseStyleDecorator itemStyle,bool isContainer):base(itemStyle,isContainer){ + + } + + public string Text { + get { + return text; + } + set { + text = value; + } + } + + public override BaseStyleDecorator StyleDecorator { + get { + return base.StyleDecorator; + } + set { + base.StyleDecorator = value; + } + } + + public override string ToString() + { + return this.text; + } + + } +} diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/IExportColumnBuilder .cs b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/IExportColumnBuilder .cs new file mode 100644 index 0000000000..e978b41d0b --- /dev/null +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/IExportColumnBuilder .cs @@ -0,0 +1,29 @@ +/* + * Created by SharpDevelop. + * User: Forstmeier Helmut + * Date: 03.10.2006 + * Time: 11:47 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Drawing; +using SharpReportCore.Exporters; + +namespace SharpReportCore +{ + /// + /// Description of Interface1. + /// + public interface IExportColumnBuilder{ + BaseExportColumn CreateExportColumn (Graphics graphics); + } + + public interface IPerformLine{ + BaseStyleDecorator StyleDecorator { + get;set; + } + } + +} diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportItemsConverter.cs b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportItemsConverter.cs new file mode 100644 index 0000000000..85ef82156e --- /dev/null +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportItemsConverter.cs @@ -0,0 +1,53 @@ +/* + * Created by SharpDevelop. + * User: Forstmeier Helmut + * Date: 20.09.2006 + * Time: 09:36 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.Drawing; + +using System.Drawing.Printing; + +namespace SharpReportCore.Exporters{ + + public class ExportItemsConverter{ + Graphics graphics; + int offset; + + public ExportItemsConverter (Graphics graphics) { + this.graphics = graphics; + } + + public ExportText ConvertToLineItems (IItemRenderer r) { + IExportColumnBuilder lineBuilder = r as IExportColumnBuilder; + ExportText lineItem = null; + if (lineBuilder != null) { + + lineItem = (ExportText)lineBuilder.CreateExportColumn(this.graphics); + lineItem.StyleDecorator.Location = new Point(lineItem.StyleDecorator.Location.X, + lineItem.StyleDecorator.Location.Y + offset); + } else { + System.Console.WriteLine("Can't Convert <{0}> to ILineBuilder",r.Name); + } + return lineItem; + } + + public int Offset { + get { + return offset; + } + set { + offset = value; + } + } + + } +} + diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/PageBuilder.cs b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/PageBuilder.cs new file mode 100644 index 0000000000..3107ca7adc --- /dev/null +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/PageBuilder.cs @@ -0,0 +1,300 @@ +/* + * Created by SharpDevelop. + * User: Forstmeier Helmut + * Date: 20.09.2006 + * Time: 09:36 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.Drawing; + +using System.Drawing.Printing; + +namespace SharpReportCore.Exporters +{ + /// + /// Description of PageBuilder. + /// + public class PageBuilder + { + List pages; + ReportModel reportModel; + DataManager dataManager; + DataNavigator dataNavigator; + ExportItemsConverter lineItemsConverter; + +// public delegate List ConverterDelegate (LineItemsConverter c,BaseSection s,SinglePage p); + public delegate List ConverterDelegate (BaseSection s,SinglePage p); + #region Constructor + public PageBuilder () { + pages = new List(); + } + + public PageBuilder(ReportModel reportModel,DataManager dataManager):this(){ + if (reportModel == null) { + throw new ArgumentNullException("reportModel"); + } + if (dataManager == null) { + throw new ArgumentNullException("dataManager"); + } + this.reportModel = reportModel; + this.dataManager = dataManager; + } + + #endregion + + #region template + /* + // Events from ReportDocument + reportDocument.QueryPageSettings += new QueryPageSettingsEventHandler (ReportQueryPage); + reportDocument.BeginPrint += new PrintEventHandler(ReportBegin); + reportDocument.PrintPage += new PrintPageEventHandler(ReportPageStart); + reportDocument.EndPrint += new PrintEventHandler(ReportEnd); + + // homemade events + reportDocument.BodyStart += new EventHandler (BodyStart); + + reportDocument.BodyEnd += new EventHandler (BodyEnd); + + // + reportDocument.RenderReportHeader += new EventHandler (PrintReportHeader); + reportDocument.RenderPageHeader += new EventHandler (PrintPageHeader); + reportDocument.RenderDetails += new EventHandler (PrintDetail); + reportDocument.RenderPageEnd += new EventHandler (PrintPageEnd); + reportDocument.RenderReportEnd += new EventHandler (PrintReportFooter); + + */ + #endregion + + private SinglePage CreateNewPage () { + PageSettings ps = this.reportModel.ReportSettings.PageSettings; + ps.Margins = this.reportModel.ReportSettings.DefaultMargins; + SectionBounds sb = null; + if (this.pages.Count == 0) { + sb = new SectionBounds(ps,true); + } else { + sb = new SectionBounds(ps,false); + } + + SinglePage sp = new SinglePage(sb); + return sp; + } + + private void BuildReportHeader (SinglePage page) { + BaseSection section = this.reportModel.ReportHeader; +// System.Console.WriteLine("ReportHeader with {0} items ",section.Items.Count); + +// LineItemsConverter conv = new LineItemsConverter(graphics); + this.lineItemsConverter.Offset = page.SectionBounds.ReportHeaderRectangle.Top; + System.Console.WriteLine("ReportHeader start at {0} with {1} items", + this.lineItemsConverter.Offset, + section.Items.Count); + List l = section.Items.ConvertAll (this.lineItemsConverter.ConvertToLineItems); + page.Items.AddRange(l); + + } + + private void BuildPageHeader (SinglePage page) { + BaseSection section = this.reportModel.PageHeader; +// System.Console.WriteLine("PageHeader with {0} items ",section.Items.Count); + +// LineItemsConverter conv = new LineItemsConverter(graphics); + this.lineItemsConverter.Offset = page.SectionBounds.PageHeaderRectangle.Top; + System.Console.WriteLine("Page Header start at {0} with {1} Items", + this.lineItemsConverter.Offset, + section.Items.Count); + List l = section.Items.ConvertAll (this.lineItemsConverter.ConvertToLineItems); + page.Items.AddRange(l); + +// System.Console.WriteLine("\tList {0}",l.Count); +// System.Console.WriteLine("\tpages.items.coun {0}",page.Items.Count); + } + + + + private void BuildDetails (SinglePage page,Graphics graphics) { + + bool firstOnPage = true; + + if (! dataNavigator.HasMoreData ) { + return; + } + + + if (this.pages.Count == 0) { + dataNavigator.MoveNext(); + } + + BaseSection section = this.reportModel.DetailSection; + section.SectionOffset = page.SectionBounds.DetailStart.Y; + do { + + + + dataNavigator.Fill(section.Items); + + if (!firstOnPage) { + section.SectionOffset = section.SectionOffset + section.Size.Height + 2 * page.SectionBounds.Gap; + } + + MeasurementService.FitSectionToItems (section,graphics); + List convertedList = new List(); + + ConverterDelegate converterDelegate; + + if (section.Items[0] is IContainerItem) { + converterDelegate = new ConverterDelegate(DoContainerJob); + } else { + converterDelegate = new ConverterDelegate(DoJob); + } + + convertedList = converterDelegate(section,page); + + page.Items.AddRange(convertedList); + firstOnPage = false; + } + while (dataNavigator.MoveNext()); + + } + + private List DoContainerJob (BaseSection section,SinglePage page) { + + IExportColumnBuilder builder = section.Items[0] as IExportColumnBuilder; + + this.lineItemsConverter.Offset = section.SectionOffset; + + if (builder != null) { + System.Console.WriteLine("Create RowList with Location {0}",this.lineItemsConverter.Offset); + + Graphics g = reportModel.ReportSettings.PageSettings.PrinterSettings.CreateMeasurementGraphics(); + + ExportContainer lineItem = (ExportContainer)builder.CreateExportColumn(g); + + IContainerItem containerItem = section.Items[0] as IContainerItem; + + // reread + this.dataNavigator.Fill(containerItem.Items); + List childList = containerItem.Items.ConvertAll (this.lineItemsConverter.ConvertToLineItems); + + lineItem.Items.AddRange(childList); + + childList.ForEach(display); + + List containerList = new List(); + containerList.Add (lineItem); + g.Dispose(); + return containerList; + } + return null; + } + + private List DoJob (BaseSection section,SinglePage page) { + + this.lineItemsConverter.Offset = section.SectionOffset; + System.Console.WriteLine("Plain Item {0}/{1}",section.SectionOffset,page.SectionBounds.DetailStart); + List list = section.Items.ConvertAll (this.lineItemsConverter.ConvertToLineItems); + + if (list.Count > 0) { + + bool istrue = list.TrueForAll(delegate(BaseExportColumn item){ + if (item.StyleDecorator.Location.Y + item.StyleDecorator.Size.Height > page.SectionBounds.DetailEnds.Y) { + return false; + } + + +// System.Console.WriteLine("{0} / {1}", +// item.ItemStyle.Location.Y + item.ItemStyle.Size.Height, +// page.SectionBounds.DetailEnds.Y); + return true; + }); + } +// list.ForEach(display); + return list; + } + + + + private void display (IPerformLine li) { +// System.Console.WriteLine("\tdisplay {0}",li.ToString()); + ExportText l = li as ExportText; + if (l != null) { + System.Console.WriteLine("\t\t{0} / {1} ",l.StyleDecorator.Location,l.Text); + } + + } + + + private void BuildPageFooter (SinglePage page) { + BaseSection section = this.reportModel.PageFooter; + + this.lineItemsConverter.Offset = page.SectionBounds.PageFooterRectangle.Top; +// System.Console.WriteLine("Page Footer start at {0} with {1} Items", +// this.lineItemsConverter.Offset, +// section.Items.Count); + List l = section.Items.ConvertAll (this.lineItemsConverter.ConvertToLineItems); + page.Items.AddRange(l); + } + + private void Write (SinglePage page) { + this.dataNavigator = this.dataManager.GetNavigator; + Graphics graphics = reportModel.ReportSettings.PageSettings.PrinterSettings.CreateMeasurementGraphics(); + this.lineItemsConverter = new ExportItemsConverter(graphics); + if (this.pages.Count == 0) { + BuildReportHeader (page); + } + + BuildPageHeader(page) ; + BuildDetails (page,graphics); + BuildPageFooter (page); + graphics.Dispose(); + } + + + public void AddPage (SinglePage page) { + if (page == null) { + throw new ArgumentNullException("page"); + } + this.pages.Add(page); + } + + + public void CreateReport () { + SinglePage page = this.CreateNewPage(); + page.CalculatePageBounds(this.reportModel); + Write(page); + this.pages.Add(page); + } + + + public int PageCount{ + get { + return this.pages.Count; + } + } + + public SinglePage FirstPage { + get { + if (this.pages.Count > 0) { + return pages[0]; + } + return null; + } + } + + public SinglePage LastPage { + get { + if (this.pages.Count > 0) { + return pages[pages.Count -1]; + } + return null; + } + + } + } + +} diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/SinglePage.cs b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/SinglePage.cs new file mode 100644 index 0000000000..f8fdb4c886 --- /dev/null +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/SinglePage.cs @@ -0,0 +1,101 @@ +/* + * Created by SharpDevelop. + * User: Forstmeier Helmut + * Date: 19.09.2006 + * Time: 22:18 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Printing; + +namespace SharpReportCore.Exporters +{ + + public class SinglePage + { +// List items; + ExporterCollection items; + SectionBounds sectionBounds; + + + public SinglePage():this (new SectionBounds(new PageSettings())){ + } + + + public SinglePage(SectionBounds sectionBounds) + { + this.sectionBounds = sectionBounds; +// items = new List (); + items = new ExporterCollection(); + } + + public void CalculatePageBounds (ReportModel reportModel) { + + Graphics graphics = reportModel.ReportSettings.PageSettings.PrinterSettings.CreateMeasurementGraphics(); + Rectangle rectangle; + + if (this.sectionBounds.Firstpage) { + rectangle = sectionBounds.MeasureReportHeader(reportModel.ReportHeader,graphics); + + + } else { + rectangle = new Rectangle (reportModel.ReportSettings.DefaultMargins.Left, + reportModel.ReportSettings.DefaultMargins.Top, + this.sectionBounds.MarginBounds.Width, + 0); + } + + + reportModel.ReportHeader.SectionOffset = reportModel.ReportSettings.DefaultMargins.Top; + sectionBounds.ReportHeaderRectangle = rectangle; + + //PageHeader + + this.sectionBounds.MeasurePageHeader(reportModel.PageHeader, + rectangle,graphics); +// + + //PageFooter + + this.sectionBounds.MeasurePageFooter (reportModel.PageFooter,graphics); + + //ReportFooter + + sectionBounds.ReportFooterRectangle = this.sectionBounds.MeasureReportFooter(reportModel.ReportFooter, + graphics); + graphics.Dispose(); + } + + public void AddLineItem (BaseExportColumn item) { + if (item == null) { + throw new ArgumentNullException("item"); + } + this.items.Add(item); + } + + public ExporterCollection Items { + get { + if (this.items == null) { + items = new ExporterCollection(); + } + return items; + } + } + + public SectionBounds SectionBounds { + get { + return sectionBounds; + } + } + + } + + public class ExporterCollection : List + where T : BaseExportColumn { + + } +} diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractRenderer.cs b/src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractRenderer.cs index c1dee1ce90..a73c024023 100644 --- a/src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractRenderer.cs +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractRenderer.cs @@ -304,8 +304,8 @@ namespace SharpReportCore { sectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportPageHeader, CultureInfo.InvariantCulture); - this.sectionBounds.MeasurePageHeader(this.CurrentSection, - rectangle,graphics,reportDocument.PageNumber); + this.sectionBounds.MeasurePageHeader(this.CurrentSection,rectangle,graphics); + //PageFooter sectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportPageFooter, diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/Printing/SectionBounds.cs b/src/AddIns/Misc/SharpReport/SharpReportCore/Printing/SectionBounds.cs index 288a10c17e..02ded1582d 100644 --- a/src/AddIns/Misc/SharpReport/SharpReportCore/Printing/SectionBounds.cs +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/Printing/SectionBounds.cs @@ -26,7 +26,17 @@ namespace SharpReportCore{ int gap; PageSettings pageSettings; + public SectionBounds(PageSettings pageSettings) + { + this.pageSettings = pageSettings; + this.firstpage = true; + this.gap = 1; + } + public SectionBounds(PageSettings pageSettings,bool firstpage ):this(pageSettings,firstpage,0) + { + } + public SectionBounds(PageSettings pageSettings,bool firstpage,int gap){ this.firstpage = firstpage; this.pageSettings = pageSettings; @@ -61,13 +71,13 @@ namespace SharpReportCore{ } - public void MeasurePageHeader (BaseSection section,Rectangle startAfter,Graphics graphics,int pageNr) { + public void MeasurePageHeader (BaseSection section,Rectangle startAfter,Graphics graphics) { if (graphics == null) { throw new ArgumentNullException("graphics"); } - if (pageNr == 1){ + if (this.firstpage){ section.SectionOffset = (int)startAfter.Top + this.gap; } else { section.SectionOffset = this.pageSettings.Margins.Top; @@ -75,10 +85,9 @@ namespace SharpReportCore{ MeasurementService.FitSectionToItems (section,graphics); this.pageHeaderRectangle = new Rectangle (startAfter.Left, - startAfter.Bottom + this.gap, - this.MarginBounds.Width, - section.Size.Height + this.gap); - + startAfter.Bottom + this.gap, + this.MarginBounds.Width, + section.Size.Height + this.gap); } @@ -192,6 +201,16 @@ namespace SharpReportCore{ } } + public int Gap { + get { + return gap; + } + set { + gap = value; + } + } + + #endregion } } diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/SharpReportCore.csproj b/src/AddIns/Misc/SharpReport/SharpReportCore/SharpReportCore.csproj index e8828b1010..bae7b5fa40 100644 --- a/src/AddIns/Misc/SharpReport/SharpReportCore/SharpReportCore.csproj +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/SharpReportCore.csproj @@ -137,6 +137,15 @@ + + + + + + + + + @@ -160,6 +169,8 @@ + + \ No newline at end of file diff --git a/src/AddIns/Misc/SharpReport/SharpReportCore/SharpReportEngine.cs b/src/AddIns/Misc/SharpReport/SharpReportCore/SharpReportEngine.cs index dbafda0474..df8f459fbf 100644 --- a/src/AddIns/Misc/SharpReport/SharpReportCore/SharpReportEngine.cs +++ b/src/AddIns/Misc/SharpReport/SharpReportCore/SharpReportEngine.cs @@ -106,7 +106,14 @@ namespace SharpReportCore { } - + private void InitPageBuilder (ReportModel reportModel,ReportParameters reportParameters ) { + CheckAllReportParameters (reportModel,reportParameters); + this.InitDataContainer (reportModel.ReportSettings); + if (this.dataManager == null) { + throw new MissingDataManagerException(); + } + } + #endregion #region Setup for print/preview @@ -358,43 +365,43 @@ namespace SharpReportCore { throw; } } - /* - public SharpReportCore.Exporters.PageBuilder_A BuildPages_A (string fileName,ReportParameters reportParameters) { - - try { - RendererFactory rf = new RendererFactory(); - ReportModel model = ModelFromFile (fileName); - - CheckAllReportParameters (model,reportParameters); - this.InitDataContainer (model.ReportSettings); + + public SharpReportCore.Exporters.PageBuilder CreatePageBuilder (ReportModel reportModel) { + if (reportModel == null) { + throw new ArgumentNullException("reportModel"); + } + this.InitPageBuilder(reportModel,null); +// CheckAllReportParameters (reportModel,null); +// this.InitDataContainer (reportModel.ReportSettings); +// if (this.dataManager == null) { +// throw new MissingDataManagerException(); +// } + SharpReportCore.Exporters.PageBuilder builder = + new SharpReportCore.Exporters.PageBuilder(reportModel,dataManager); - SharpReportCore.Exporters.PageBuilder_A builder = - new SharpReportCore.Exporters.PageBuilder_A(model,dataManager); - builder.Go(); - return builder; - } catch (Exception ) { - throw; - } + return builder; } - public SharpReportCore.Exporters.PageBuilder_B BuildPages_B (string fileName,ReportParameters reportParameters) { + public SharpReportCore.Exporters.PageBuilder CreatePageBuilder (string fileName,ReportParameters reportParameters) { try { - RendererFactory rf = new RendererFactory(); ReportModel model = ModelFromFile (fileName); - - CheckAllReportParameters (model,reportParameters); - this.InitDataContainer (model.ReportSettings); + this.InitPageBuilder(model,reportParameters); +// CheckAllReportParameters (model,reportParameters); +// this.InitDataContainer (model.ReportSettings); +// if (this.dataManager == null) { +// throw new MissingDataManagerException(); +// } + SharpReportCore.Exporters.PageBuilder builder = + new SharpReportCore.Exporters.PageBuilder(model,dataManager); - SharpReportCore.Exporters.PageBuilder_B builder = - new SharpReportCore.Exporters.PageBuilder_B(model,dataManager); -// builder.ReportDocument.PrintController = new System.Drawing.Printing.PreviewPrintController(); return builder; + } catch (Exception ) { throw; } } - */ + /// /// Preview a "PushModel - Report" ///