Browse Source

Rework conversion of RowConverter and TableConverter, remove duplicate code

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@5673 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Peter Forstmeier 16 years ago
parent
commit
681a081213
  1. 12
      src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs
  2. 64
      src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/RowConverter.cs
  3. 35
      src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs
  4. 4
      src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/ExportColumns/ExportText.cs

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

@ -33,7 +33,8 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -33,7 +33,8 @@ namespace ICSharpCode.Reports.Core.Exporter
public event EventHandler<SectionRenderEventArgs> SectionRendering;
public BaseConverter(IDataNavigator dataNavigator,ExporterPage singlePage,IExportItemsConverter exportItemsConverter,ILayouter layouter)
public BaseConverter(IDataNavigator dataNavigator,ExporterPage singlePage,
IExportItemsConverter exportItemsConverter,ILayouter layouter)
{
if (dataNavigator == null) {
throw new ArgumentNullException("dataNavigator");
@ -140,5 +141,14 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -140,5 +141,14 @@ namespace ICSharpCode.Reports.Core.Exporter
public Graphics Graphics {get;set;}
#endregion
protected Size KeepSize {get;set;}
protected void DoRow (BaseRowItem row)
{
Console.WriteLine("DoRow");
DataNavigator.Fill(row.Items);
PrintHelper.SetLayoutForRow(Graphics,Layouter,row);
}
}
}

64
src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/RowConverter.cs

@ -22,7 +22,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -22,7 +22,7 @@ namespace ICSharpCode.Reports.Core.Exporter
public class RowConverter:BaseConverter
{
private BaseRowItem baseRowItem;
private BaseReportItem parent;
public RowConverter(IDataNavigator dataNavigator,
ExporterPage singlePage,
@ -39,46 +39,51 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -39,46 +39,51 @@ namespace ICSharpCode.Reports.Core.Exporter
if (item == null) {
throw new ArgumentNullException("item");
}
IContainerItem row = item as IContainerItem;
this.parent = parent;
this.baseRowItem = item as BaseRowItem;
this.baseRowItem.Parent = parent;
PrintHelper.AdjustParent(parent,row.Items);
if (PrintHelper.IsTextOnlyRow(item as BaseRowItem)) {
return this.ConvertTextOnlyRow(parent, item);
PrintHelper.AdjustParent(parent,this.baseRowItem.Items);
if (PrintHelper.IsTextOnlyRow(this.baseRowItem)) {
ExporterCollection myList = new ExporterCollection();
this.InternalConvertRow(myList, item,parent.Location.X,
new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y));
return myList;
} else {
return this.ConvertDataRow(parent,item);
return this.ConvertDataRow(item);
}
}
private ExporterCollection ConvertDataRow (BaseReportItem parent, BaseReportItem item)
private ExporterCollection ConvertDataRow ( BaseReportItem item)
// private ExporterCollection ConvertDataRow (BaseReportItem parent, BaseReportItem item)
{
ExporterCollection mylist = new ExporterCollection();
Point currentPosition = new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y);
BaseSection section = parent as BaseSection;
IContainerItem row = section.Items[0] as IContainerItem;
int defaultLeftPos = parent.Location.X;
do {
section.Location = new Point(section.Location.X,section.SectionOffset );
base.DataNavigator.Fill(row.Items);
//
section.Size = this.SectionBounds.DetailSectionRectangle.Size;
base.FireSectionRendering(section);
base.KeepSize = new Size (section.Items[0].Size.Width,section.Items[0].Size.Height);
Size containerSize = new Size (section.Items[0].Size.Width,section.Items[0].Size.Height);
base.DoRow(row as BaseRowItem);
base.FireSectionRendering(section);
PrintHelper.SetLayoutForRow(base.Graphics,base.Layouter,row);
mylist.AddRange(this.ConvertTextOnlyRow(parent,item));
section.Items[0].Size = containerSize;
currentPosition = this.InternalConvertRow(mylist,item,defaultLeftPos,currentPosition);
section.Items[0].Size = base.KeepSize;
section.SectionOffset += section.Size.Height + 2 * base.SinglePage.SectionBounds.Gap;
Rectangle r = new Rectangle(section.Location.X,section.SectionOffset,
section.Size.Width,section.Size.Height);
Rectangle r = new Rectangle(new Point (((BaseRowItem)row).Location.X,currentPosition.Y), section.Size);
if (PrintHelper.IsPageFull(r,base.SectionBounds)) {
base.FirePageFull(mylist);
section.SectionOffset = base.SinglePage.SectionBounds.PageHeaderRectangle.Location.Y;
currentPosition = new Point(base.SectionBounds.PageHeaderRectangle.X,base.SectionBounds.PageHeaderRectangle.Y);
mylist.Clear();
}
}
@ -91,20 +96,15 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -91,20 +96,15 @@ namespace ICSharpCode.Reports.Core.Exporter
SectionBounds.ReportFooterRectangle.Height);
return mylist;
}
private ExporterCollection ConvertTextOnlyRow(BaseReportItem parent,
BaseReportItem item)
private Point InternalConvertRow(ExporterCollection myList,BaseReportItem item,int leftPos,Point curPos)
{
ExporterCollection mylist = base.Convert(parent,item);
this.baseRowItem = item as BaseRowItem;
Point drawAt = base.ParentRectangle.Location;
baseRowItem.Location = new Point (base.ParentRectangle.Left,baseRowItem.Location.Y);
ExporterCollection ml = this.ConvertItems (parent,baseRowItem, drawAt);
drawAt = new Point (base.ParentRectangle.Left,drawAt.Y + baseRowItem.Size.Height);
mylist.AddRange(ml);
return mylist;
baseRowItem.Location = new Point (leftPos,baseRowItem.Location.Y);
ExporterCollection ml = this.ConvertItems (this.parent,baseRowItem, curPos);
myList.AddRange(ml);
return new Point (leftPos,curPos.Y + this.baseRowItem.Size.Height + (3 *GlobalValues.GapBetweenContainer));
}
}
}

35
src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs

@ -60,36 +60,34 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -60,36 +60,34 @@ namespace ICSharpCode.Reports.Core.Exporter
if (row.Items.Count > 0) {
row.Location = new Point (row.Location.X + defaultLeftPos,row.Location.Y);
row.Parent = (BaseReportItem)this.baseTable;
Size rowSize = new Size (row.Size.Width,row.Size.Height);
base.KeepSize = new Size (row.Size.Width,row.Size.Height);
// Header/FooterRow
if (PrintHelper.IsTextOnlyRow(row) ) {
headerRow = row;
currentPosition = PrintTableHeader(mylist,headerRow,defaultLeftPos,currentPosition);
currentPosition = InternalConvertRow(mylist,headerRow,defaultLeftPos,currentPosition);
}
else
{
// DataRegion
rowSize = new Size (row.Size.Width,row.Size.Height);
base.KeepSize = new Size (row.Size.Width,row.Size.Height);
do {
//
BaseSection section = this.baseTable.Parent as BaseSection;
section.Location = new Point(section.Location.X,section.SectionOffset );
base.DataNavigator.Fill(row.Items);
PrintHelper.SetLayoutForRow(base.Graphics,base.Layouter,row);
base.DoRow(row);
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,
currentPosition = InternalConvertRow(mylist,headerRow,
defaultLeftPos,
base.SectionBounds.ReportHeaderRectangle.Location);
}
currentPosition = this.DoConvert(mylist,row,defaultLeftPos,currentPosition);
row.Size = rowSize;
currentPosition = InternalConvertRow(mylist,row,defaultLeftPos,currentPosition);
row.Size = base.KeepSize;
}
while (base.DataNavigator.MoveNext());
//Allway's reset the DataNavigator
@ -106,19 +104,12 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -106,19 +104,12 @@ namespace ICSharpCode.Reports.Core.Exporter
}
private Point PrintTableHeader(ExporterCollection list,BaseRowItem row,int leftPos,Point curPos )
private Point InternalConvertRow(ExporterCollection myList,BaseRowItem row,int leftPos,Point curPos )
{
PrintHelper.SetLayoutForRow(base.Graphics,base.Layouter,row);
return DoConvert (list,row,leftPos,curPos);
ExporterCollection ml = base.ConvertItems (this.baseTable.Parent,row, curPos);
myList.AddRange(ml);
return new Point (leftPos,curPos.Y + row.Size.Height + (3 *GlobalValues.GapBetweenContainer));
}
private Point DoConvert(ExporterCollection mylist,BaseRowItem row,int x,Point dp)
{
ExporterCollection ml = base.ConvertItems (this.baseTable.Parent,row, dp);
mylist.AddRange(ml);
return new Point (x,dp.Y + row.Size.Height + (3 *GlobalValues.GapBetweenContainer));
}
}
}

4
src/AddIns/Misc/SharpReport/ICSharpCode.Reports.Core/Project/Exporter/ExportColumns/ExportText.cs

@ -68,7 +68,9 @@ namespace ICSharpCode.Reports.Core.Exporter { @@ -68,7 +68,9 @@ namespace ICSharpCode.Reports.Core.Exporter {
// itextsharp + columntext + textheight
//itextsharp + columntext + rectangle
//itextsharp + simulate
//http://www.mail-archive.com/itext-questions@lists.sourceforge.net/msg04747.html
base.Decorate();
PdfContentByte contentByte = base.PdfWriter.DirectContent;
iTextSharp.text.Rectangle r = base.ConvertToPdfRectangle();

Loading…
Cancel
Save