Browse Source

Base Structure of ExportDataProvider

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1909 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Peter Forstmeier 20 years ago
parent
commit
8e87258d2e
  1. 21
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseDataItem.cs
  2. 51
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseTextItem.cs
  3. 26
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/RowItem.cs
  4. 53
      src/AddIns/Misc/SharpReport/SharpReportCore/Exceptions/MissingDataManagerException.cs
  5. 129
      src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/BaseStyleDecorator.cs
  6. 60
      src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/BaseExportColumn.cs
  7. 46
      src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/ExportContainer.cs
  8. 52
      src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/ExportText.cs
  9. 29
      src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/IExportColumnBuilder .cs
  10. 53
      src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportItemsConverter.cs
  11. 300
      src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/PageBuilder.cs
  12. 101
      src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/SinglePage.cs
  13. 4
      src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractRenderer.cs
  14. 31
      src/AddIns/Misc/SharpReport/SharpReportCore/Printing/SectionBounds.cs
  15. 11
      src/AddIns/Misc/SharpReport/SharpReportCore/SharpReportCore.csproj
  16. 59
      src/AddIns/Misc/SharpReport/SharpReportCore/SharpReportEngine.cs

21
src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseDataItem.cs

@ -14,7 +14,7 @@ using System.Drawing; @@ -14,7 +14,7 @@ using System.Drawing;
using System.ComponentModel;
using System.Xml.Serialization;
using SharpReportCore;
using SharpReportCore.Exporters;
/// <summary>
@ -25,7 +25,8 @@ using SharpReportCore; @@ -25,7 +25,8 @@ using SharpReportCore;
/// created on - 22.08.2005 00:12:59
/// </remarks>
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 { @@ -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 { @@ -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) {

51
src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseTextItem.cs

@ -12,7 +12,7 @@ using System.Drawing; @@ -12,7 +12,7 @@ using System.Drawing;
using System.ComponentModel;
using System.Xml.Serialization;
using SharpReportCore;
using SharpReportCore.Exporters;
/// <summary>
/// This class is the BaseClass for all TextBased Items
@ -22,15 +22,16 @@ using SharpReportCore; @@ -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 { @@ -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 ){

26
src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/RowItem.cs

@ -13,13 +13,14 @@ using System.Drawing.Drawing2D; @@ -13,13 +13,14 @@ using System.Drawing.Drawing2D;
using System.ComponentModel;
using System.Collections.Generic;
using System.Windows.Forms;
using SharpReportCore.Exporters;
namespace SharpReportCore{
/// <summary>
/// Description of BaseRowItem.
/// </summary>
public class RowItem:BaseReportItem,IContainerItem{
public class RowItem:BaseReportItem,IContainerItem,IExportColumnBuilder{
private string tableName;
private ReportItemCollection items;
@ -47,6 +48,29 @@ namespace SharpReportCore{ @@ -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);

53
src/AddIns/Misc/SharpReport/SharpReportCore/Exceptions/MissingDataManagerException.cs

@ -0,0 +1,53 @@ @@ -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);
}
}
}

129
src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/BaseStyleDecorator.cs

@ -0,0 +1,129 @@ @@ -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
{
/// <summary>
/// Description of LineStyle.
/// </summary>
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() {
}
}
}

60
src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/BaseExportColumn.cs

@ -0,0 +1,60 @@ @@ -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
{
/// <summary>
/// Description of BaseLineItem.
/// </summary>
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;
}
}
}
}

46
src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/ExportContainer.cs

@ -0,0 +1,46 @@ @@ -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
{
/// <summary>
/// Description of ContainerItem.
/// </summary>
public class ExportContainer:BaseExportColumn
{
// List<IPerformLine> items;
ExporterCollection<BaseExportColumn> 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<BaseExportColumn> Items {
get {
if (this.items == null) {
items = new ExporterCollection<BaseExportColumn>();
}
return items;
}
}
}
}

52
src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/ExportText.cs

@ -0,0 +1,52 @@ @@ -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 {
/// <summary>
/// Description of LineItem.
/// </summary>
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;
}
}
}

29
src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportColumns/IExportColumnBuilder .cs

@ -0,0 +1,29 @@ @@ -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
{
/// <summary>
/// Description of Interface1.
/// </summary>
public interface IExportColumnBuilder{
BaseExportColumn CreateExportColumn (Graphics graphics);
}
public interface IPerformLine{
BaseStyleDecorator StyleDecorator {
get;set;
}
}
}

53
src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/ExportItemsConverter.cs

@ -0,0 +1,53 @@ @@ -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;
}
}
}
}

300
src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/PageBuilder.cs

@ -0,0 +1,300 @@ @@ -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
{
/// <summary>
/// Description of PageBuilder.
/// </summary>
public class PageBuilder
{
List<SinglePage> pages;
ReportModel reportModel;
DataManager dataManager;
DataNavigator dataNavigator;
ExportItemsConverter lineItemsConverter;
// public delegate List <IPerformLine> ConverterDelegate (LineItemsConverter c,BaseSection s,SinglePage p);
public delegate List <BaseExportColumn> ConverterDelegate (BaseSection s,SinglePage p);
#region Constructor
public PageBuilder () {
pages = new List<SinglePage>();
}
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<ReportPageEventArgs> (BodyStart);
reportDocument.BodyEnd += new EventHandler<ReportPageEventArgs> (BodyEnd);
//
reportDocument.RenderReportHeader += new EventHandler<ReportPageEventArgs> (PrintReportHeader);
reportDocument.RenderPageHeader += new EventHandler<ReportPageEventArgs> (PrintPageHeader);
reportDocument.RenderDetails += new EventHandler<ReportPageEventArgs> (PrintDetail);
reportDocument.RenderPageEnd += new EventHandler<ReportPageEventArgs> (PrintPageEnd);
reportDocument.RenderReportEnd += new EventHandler<ReportPageEventArgs> (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 <BaseExportColumn>l = section.Items.ConvertAll <BaseExportColumn> (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 <BaseExportColumn>l = section.Items.ConvertAll <BaseExportColumn> (this.lineItemsConverter.ConvertToLineItems);
page.Items.AddRange(l);
// System.Console.WriteLine("\tList<string> {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 <BaseExportColumn>convertedList = new List<BaseExportColumn>();
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 <BaseExportColumn> 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 <BaseExportColumn> childList = containerItem.Items.ConvertAll <BaseExportColumn> (this.lineItemsConverter.ConvertToLineItems);
lineItem.Items.AddRange(childList);
childList.ForEach(display);
List <BaseExportColumn> containerList = new List<BaseExportColumn>();
containerList.Add (lineItem);
g.Dispose();
return containerList;
}
return null;
}
private List <BaseExportColumn> DoJob (BaseSection section,SinglePage page) {
this.lineItemsConverter.Offset = section.SectionOffset;
System.Console.WriteLine("Plain Item {0}/{1}",section.SectionOffset,page.SectionBounds.DetailStart);
List <BaseExportColumn>list = section.Items.ConvertAll <BaseExportColumn> (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 <BaseExportColumn>l = section.Items.ConvertAll <BaseExportColumn> (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;
}
}
}
}

101
src/AddIns/Misc/SharpReport/SharpReportCore/Exporter/SinglePage.cs

@ -0,0 +1,101 @@ @@ -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<IPerformLine> items;
ExporterCollection<BaseExportColumn> items;
SectionBounds sectionBounds;
public SinglePage():this (new SectionBounds(new PageSettings())){
}
public SinglePage(SectionBounds sectionBounds)
{
this.sectionBounds = sectionBounds;
// items = new List <IPerformLine>();
items = new ExporterCollection<BaseExportColumn>();
}
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<BaseExportColumn> Items {
get {
if (this.items == null) {
items = new ExporterCollection<BaseExportColumn>();
}
return items;
}
}
public SectionBounds SectionBounds {
get {
return sectionBounds;
}
}
}
public class ExporterCollection<T> : List<T>
where T : BaseExportColumn {
}
}

4
src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractRenderer.cs

@ -304,8 +304,8 @@ namespace SharpReportCore { @@ -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,

31
src/AddIns/Misc/SharpReport/SharpReportCore/Printing/SectionBounds.cs

@ -26,7 +26,17 @@ namespace SharpReportCore{ @@ -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{ @@ -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{ @@ -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{ @@ -192,6 +201,16 @@ namespace SharpReportCore{
}
}
public int Gap {
get {
return gap;
}
set {
gap = value;
}
}
#endregion
}
}

11
src/AddIns/Misc/SharpReport/SharpReportCore/SharpReportCore.csproj

@ -137,6 +137,15 @@ @@ -137,6 +137,15 @@
<Compile Include="BaseClasses\DataTypeHelper.cs" />
<Compile Include="Printing\SectionBounds.cs" />
<Compile Include="Printing\MeasurementService.cs" />
<Compile Include="Exporter\SinglePage.cs" />
<Compile Include="Exporter\PageBuilder.cs" />
<Compile Include="Exporter\BaseStyleDecorator.cs" />
<Compile Include="Exporter\ExportItemsConverter.cs" />
<Compile Include="Exceptions\MissingDataManagerException.cs" />
<Compile Include="Exporter\ExportColumns\BaseExportColumn.cs" />
<Compile Include="Exporter\ExportColumns\ExportContainer.cs" />
<Compile Include="Exporter\ExportColumns\ExportText.cs" />
<Compile Include="Exporter\ExportColumns\IExportColumnBuilder .cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="BaseItems" />
@ -160,6 +169,8 @@ @@ -160,6 +169,8 @@
<Folder Include="Xml" />
<Folder Include="Configuration" />
<Folder Include="BaseClasses" />
<Folder Include="Exporter" />
<Folder Include="Exporter\ExportColumns" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

59
src/AddIns/Misc/SharpReport/SharpReportCore/SharpReportEngine.cs

@ -106,7 +106,14 @@ namespace SharpReportCore { @@ -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 { @@ -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;
}
}
*/
/// <summary>
/// Preview a "PushModel - Report"
/// </summary>

Loading…
Cancel
Save