Browse Source

Simple (textonly) reports as FixedDocument are working

pull/15/head^2
peterforstmeier 15 years ago
parent
commit
4661680fe1
  1. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/SecondaryViews/ReportViewerSecondaryView.cs
  2. 100
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/WPF/WPFReportPreview.cs
  3. 10
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj
  4. 27
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/FixedDocumentRenderer.cs
  5. 6
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/PdfRenderer.cs
  6. 16
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IMeasurementService.cs
  7. 67
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportEngine.cs
  8. 31
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/IPreviewControl.cs
  9. 411
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/ReportViewer.cs
  10. 152
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WPF/FixedDocumentCreator.cs
  11. 27
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WpfReportViewer/WpfReportViewer.xaml

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/SecondaryViews/ReportViewerSecondaryView.cs

@ -20,7 +20,6 @@ namespace ICSharpCode.Reports.Addin @@ -20,7 +20,6 @@ namespace ICSharpCode.Reports.Addin
ReportDesignerLoader designerLoader;
ICSharpCode.Reports.Core.ReportViewer.PreviewControl control;
public ReportViewerSecondaryView(ReportDesignerLoader designerLoader,IViewContent content):base(content)
{
if (designerLoader == null) {
@ -48,6 +47,7 @@ namespace ICSharpCode.Reports.Addin @@ -48,6 +47,7 @@ namespace ICSharpCode.Reports.Addin
{
ReportModel model = designerLoader.CreateRenderableModel();
AbstractPreviewCommand cmd = null;
switch (model.DataModel) {
case GlobalEnums.PushPullModel.FormSheet : {
cmd = new FormSheetToReportViewerCommand (model,control);

100
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/WPF/WPFReportPreview.cs

@ -7,16 +7,18 @@ @@ -7,16 +7,18 @@
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Data;
using System.Drawing;
using System.Windows.Controls;
using System.Windows.Documents;
using ICSharpCode.Reports.Addin.Commands;
using ICSharpCode.Reports.Core;
using ICSharpCode.Reports.Core.BaseClasses;
using ICSharpCode.Reports.Core.Exporter;
using ICSharpCode.Reports.Core.Exporter.ExportRenderer;
using ICSharpCode.Reports.Core.Globals;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.Reports.Core.WpfReportViewer;
namespace ICSharpCode.Reports.Addin.Project.WPF
{
@ -26,85 +28,61 @@ namespace ICSharpCode.Reports.Addin.Project.WPF @@ -26,85 +28,61 @@ namespace ICSharpCode.Reports.Addin.Project.WPF
public class WPFReportPreview: AbstractSecondaryViewContent
{
ReportDesignerLoader designerLoader;
DocumentViewer viewer = new DocumentViewer();
//DocumentViewer viewer = new DocumentViewer();
IWpfReportViewer viewer = new WpfReportViewer();
public WPFReportPreview(ReportDesignerLoader loader,IViewContent content):base(content)
{
this.designerLoader = loader;
base.TabPageText = "Wpf View";
Pages = new PagesCollection();
}
public PagesCollection Pages{get;private set;}
protected override void LoadFromPrimary()
{
Console.WriteLine("WPFReportPreview - LoadFromPrimary");
Pages.Clear();
ReportModel model = designerLoader.CreateRenderableModel();
var c = new CollectParametersCommand(model);
c.Run();
switch (model.DataModel)
{
case GlobalEnums.PushPullModel.FormSheet : {
viewer.RunReport(model,(ReportParameters)null);
break;
}
case GlobalEnums.PushPullModel.PullData:{
viewer.RunReport(model,(ReportParameters)null);
break;
}
case GlobalEnums.PushPullModel.PushData:
{
DataSetFromXsdCommand cmd = new DataSetFromXsdCommand();
cmd.Run();
System.Data.DataSet ds = cmd.DataSet;
viewer.RunReport(model,ds.Tables[0],(ReportParameters)null);
break;
}
default:
throw new InvalidReportModelException();
}
// http://www.xs4all.nl/~wrb/Articles/Article_WPFButtonXPS_01.htm
IReportCreator reportCreator = FormPageBuilder.CreateInstance(model);
// reportCreator.SectionRendering += new EventHandler<SectionRenderEventArgs>(PushPrinting);
// reportCreator.PageCreated += OnPageCreated;
reportCreator.BuildExportList();
var pages = reportCreator.Pages;
// var pages = CreateTestPage();
Console.WriteLine("WPFReportPreview - Create FixedDocumentRenderer");
FixedDocumentRenderer renderer = FixedDocumentRenderer.CreateInstance(model.ReportSettings,pages);
FixedDocumentRenderer renderer = FixedDocumentRenderer.CreateInstance(model.ReportSettings,viewer.Pages);
renderer.Start();
renderer.RenderOutput();
renderer.End();
// Console.WriteLine("WPFReportPreview - document to viewer");
IDocumentPaginatorSource document = renderer.Document;
viewer.Document = renderer.Document;
}
PagesCollection CreateTestPage()
{
var pages = new PagesCollection();
ExporterPage page = ExporterPage.CreateInstance(new SectionBounds(new ReportSettings(),false),1);
page.PageNumber = 1;
TextStyleDecorator decorator1 = new TextStyleDecorator()
{
Location = new System.Drawing.Point (10,10),
Font = GlobalValues.DefaultFont,
ForeColor = Color.Black,
BackColor = Color.White
};
page.Items.Add(new ExportText (decorator1,false)
{
Text = "hello world"
});
TextStyleDecorator decorator2 = new TextStyleDecorator()
{
Location = new System.Drawing.Point (20,20),
Font = GlobalValues.DefaultFont,
ForeColor = Color.Black,
BackColor = Color.White
};
page.Items.Add(new ExportText (decorator2,false)
{
Text = "My First PdfPrintout"
});
pages.Add(page);
return pages;
}
protected override void SaveToPrimary()
{
// throw new NotImplementedException();

10
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj

@ -294,7 +294,6 @@ @@ -294,7 +294,6 @@
<Compile Include="Project\Interfaces\IItemConverter.cs" />
<Compile Include="Project\Interfaces\ILayouter.cs" />
<Compile Include="Project\Interfaces\IReportItem.cs" />
<Compile Include="Project\Interfaces\IMeasurementService.cs" />
<Compile Include="Project\Interfaces\IReportModel.cs" />
<Compile Include="Project\Interfaces\ISinglePage.cs" />
<Compile Include="Project\IReportCreator.cs" />
@ -314,6 +313,7 @@ @@ -314,6 +313,7 @@
<SubType>Component</SubType>
</Compile>
<Compile Include="Project\ReportEngine.cs" />
<Compile Include="Project\ReportViewer\IPreviewControl.cs" />
<Compile Include="Project\ReportViewer\NumericToolStripTextBox.cs">
<SubType>Component</SubType>
</Compile>
@ -368,6 +368,10 @@ @@ -368,6 +368,10 @@
<Compile Include="Project\ReportViewer\ReportViewer.designer.cs">
<DependentUpon>ReportViewer.cs</DependentUpon>
</Compile>
<Compile Include="Project\WpfReportViewer\WpfReportViewer.xaml.cs">
<DependentUpon>WpfReportViewer.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Project\WPF\FixedDocumentCreator.cs" />
<Compile Include="Project\WPF\FlowDocumentCreator.cs" />
<Compile Include="Project\Xml\BaseItemLoader.cs" />
@ -390,7 +394,11 @@ @@ -390,7 +394,11 @@
<None Include="Project\ReportViewer\Resources\Icons\Next.bmp" />
</ItemGroup>
<ItemGroup>
<Folder Include="Project\WpfReportViewer" />
<Folder Include="Project\WPF" />
</ItemGroup>
<ItemGroup>
<Page Include="Project\WpfReportViewer\WpfReportViewer.xaml" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

27
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/FixedDocumentRenderer.cs

@ -77,8 +77,9 @@ namespace ICSharpCode.Reports.Core.Exporter.ExportRenderer @@ -77,8 +77,9 @@ namespace ICSharpCode.Reports.Core.Exporter.ExportRenderer
var h = printDialog.PrintableAreaWidth;
Console.WriteLine(new System.Windows.Size(w,h));
PageSize = new System.Windows.Size(reportSettings.PageSize.Width,reportSettings.PageSize.Height);
document.DocumentPaginator.PageSize = PageSize;
docCreator.PageSize = new System.Windows.Size(reportSettings.PageSize.Width,reportSettings.PageSize.Height);
document.DocumentPaginator.PageSize = docCreator.PageSize;
}
@ -101,7 +102,7 @@ namespace ICSharpCode.Reports.Core.Exporter.ExportRenderer @@ -101,7 +102,7 @@ namespace ICSharpCode.Reports.Core.Exporter.ExportRenderer
// http://stackoverflow.com/questions/3671724/wpf-flowdocument-page-break-positioning
// http://wpf.2000things.com/tag/drawingvisual/
http://wpf.2000things.com/2011/03/25/256-use-a-fixeddocument-to-display-content-at-fixed-locations/
//http://wpf.2000things.com/2011/03/25/256-use-a-fixeddocument-to-display-content-at-fixed-locations/
//http://wpf.2000things.com/2011/03/25/256-use-a-fixeddocument-to-display-content-at-fixed-locations/
//http://www.neodynamic.com/ND/FaqsTipsTricks.aspx?tabid=66&prodid=0&sid=99
@ -110,30 +111,17 @@ http://wpf.2000things.com/2011/03/25/256-use-a-fixeddocument-to-display-content- @@ -110,30 +111,17 @@ http://wpf.2000things.com/2011/03/25/256-use-a-fixeddocument-to-display-content-
//http://www.eggheadcafe.com/tutorials/aspnet/9cbb4841-8677-49e9-a3a8-46031e699b2e/wpf-printing-and-print-pr.aspx
//
//http://www.eggheadcafe.com/tutorials/aspnet/22ac97f3-4a3d-4fee-a411-e456f77f6a90/wpf-report-engine-part-3.aspx
/*
System.Windows.Controls.Border b = new System.Windows.Controls.Border();
b.BorderThickness = new Thickness(2);
b.BorderBrush = System.Windows.Media.Brushes.Black;
b.Padding = new Thickness(15);
b.Child = page2Text;
FixedPage.SetLeft(b, 2 * 96 * 0.75 );
FixedPage.SetTop(b,3 * 96 * 0.75 );
page.Children.Add((UIElement)b);
*/
/*
*/
Document = document;
}
void AddPageToDocument(FixedDocument doc,FixedPage page)
void AddPageToDocument(FixedDocument fixedDocument,FixedPage page)
{
Console.WriteLine("AddPageToDocument");
PageContent pageContent = new PageContent();
((IAddChild)pageContent).AddChild(page);
doc.Pages.Add(pageContent);
fixedDocument.Pages.Add(pageContent);
}
@ -143,7 +131,6 @@ http://wpf.2000things.com/2011/03/25/256-use-a-fixeddocument-to-display-content- @@ -143,7 +131,6 @@ http://wpf.2000things.com/2011/03/25/256-use-a-fixeddocument-to-display-content-
Console.WriteLine("FixedDocumentRenderer - End");
}
public Size PageSize {get;private set;}
public IDocumentPaginatorSource Document {get;private set;}
#endregion

6
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/PdfRenderer.cs

@ -104,12 +104,6 @@ namespace ICSharpCode.Reports.Core.Exporter.ExportRenderer @@ -104,12 +104,6 @@ namespace ICSharpCode.Reports.Core.Exporter.ExportRenderer
foreach (ICSharpCode.Reports.Core.Exporter.BaseExportColumn baseExportColumn in items)
{
baseExportColumn.DrawItem(this.pdfWriter,this.pdfUnitConverter);
// IExportContainer container = baseExportColumn as ExportContainer;
// if (container == null) {
// baseExportColumn.DrawItem(this.pdfWriter,this.pdfUnitConverter);
// } else {
// container.DrawItem(this.pdfWriter,this.pdfUnitConverter);
// }
}
}

16
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IMeasurementService.cs

@ -1,16 +0,0 @@ @@ -1,16 +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;
namespace ICSharpCode.Reports.Core
{
/// <summary>
/// Description of IMeasurementService.
/// </summary>
// public interface IMeasurementService
// {
// void FitSectionToItems (Graphics graphics,BaseSection section);
// }
}

67
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportEngine.cs

@ -222,57 +222,6 @@ namespace ICSharpCode.Reports.Core { @@ -222,57 +222,6 @@ namespace ICSharpCode.Reports.Core {
#endregion
#region Public Datahandling
/*
public static IDataManager CreateDataManager (ReportSettings reportSettings,ConnectionObject connectionObject)
{
if (reportSettings == null) {
throw new ArgumentNullException("reportSettings");
}
if (connectionObject == null) {
throw new ArgumentNullException("connectionObject");
}
IDataManager dataMan = null;
if (!String.IsNullOrEmpty(connectionObject.Connection.ConnectionString)) {
SqlDataAccessStrategy sda = new SqlDataAccessStrategy(reportSettings,connectionObject);
dataMan = DataManager.CreateInstance(reportSettings,sda);
}
if (dataMan == null) {
throw new MissingDataManagerException();
}
return dataMan;
}
/// <summary>
/// Return a valid <see cref="Datamanager"></see>
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public static IDataManager CreateDataManager (ReportSettings reportSettings)
{
if (reportSettings == null) {
throw new ArgumentNullException("reportSettings");
}
IDataManager dataMan = null;
if (!String.IsNullOrEmpty(reportSettings.CommandText)) {
SqlDataAccessStrategy sda = new SqlDataAccessStrategy(reportSettings,null);
dataMan = DataManager.CreateInstance(reportSettings,sda);
}
if (dataMan == null) {
throw new MissingDataManagerException();
}
return dataMan;
}
*/
#endregion
#region Parameter Handling
///<summary>
@ -528,7 +477,7 @@ namespace ICSharpCode.Reports.Core { @@ -528,7 +477,7 @@ namespace ICSharpCode.Reports.Core {
/// <param name="reportParameters"></param>
/// <returns></returns>
public static IReportCreator CreatePageBuilder (IReportModel reportModel,
public static IReportCreator CreatePageBuilder (IReportModel reportModel,
DataTable dataTable,
ReportParameters reportParameters)
{
@ -557,8 +506,8 @@ namespace ICSharpCode.Reports.Core { @@ -557,8 +506,8 @@ namespace ICSharpCode.Reports.Core {
/// <param name="reportParameters"></param>
/// <returns></returns>
public static IReportCreator CreatePageBuilder (IReportModel reportModel,
IList list,
ReportParameters reportParameters)
IList list,
ReportParameters reportParameters)
{
if (reportModel == null) {
throw new ArgumentNullException("reportModel");
@ -705,16 +654,6 @@ namespace ICSharpCode.Reports.Core { @@ -705,16 +654,6 @@ namespace ICSharpCode.Reports.Core {
}
}
// public ConnectionObject ConnectionObject {
// get {
// return connectionObject;
// }
// set {
// connectionObject = value;
// }
// }
#endregion

31
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/IPreviewControl.cs

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
// 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.Collections;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.Globalization;
using System.Windows.Forms;
using ICSharpCode.Reports.Core.BaseClasses.Printing;
using ICSharpCode.Reports.Core.Exporter;
using ICSharpCode.Reports.Core.Exporter.ExportRenderer;
using ICSharpCode.Reports.Core.Globals;
using ICSharpCode.Reports.Core.Interfaces;
namespace ICSharpCode.Reports.Core.ReportViewer
{
public interface IPreviewControl
{
void RunReport(string fileName, ReportParameters parameters);
void RunReport(ReportModel reportModel, ReportParameters parameters);
void RunReport(ReportModel reportModel, DataTable dataTable, ReportParameters parameters);
void RunReport(ReportModel reportModel, IList dataSource, ReportParameters parameters);
void RunReport(ReportModel reportModel, IDataManager dataManager);
PagesCollection Pages { get; }
IReportViewerMessages Messages { get; set; }
}
}

411
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/ReportViewer.cs

@ -21,49 +21,46 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -21,49 +21,46 @@ namespace ICSharpCode.Reports.Core.ReportViewer
/// <summary>
/// Description of UserControl1.
/// </summary>
public partial class PreviewControl
public partial class PreviewControl : IPreviewControl
{
public event EventHandler <EventArgs> PreviewLayoutChanged;
public event EventHandler<EventArgs> PreviewLayoutChanged;
private float zoom;
private int pageNumber;
private Bitmap bitmap;
private PagesCollection pages;
private IReportViewerMessages reportViewerMessages;
private PreviewRenderer previewRenderer;
private delegate void invokeDelegate();
private ReportSettings reportSettings;
private IDataManager dataManager;
#region Constructor
public PreviewControl(){
public PreviewControl()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
this.SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.ResizeRedraw,
true);
this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true);
this.UpdateStyles();
InitZoomCombo ();
InitZoomCombo();
previewRenderer = PreviewRenderer.CreateInstance();
this.CheckEnable();
SetTransparentBackground ();
SetTransparentBackground();
this.numericToolStripTextBox2.Navigate += new EventHandler <PageNavigationEventArgs> (OnNavigate);
this.numericToolStripTextBox2.Navigate += new EventHandler<PageNavigationEventArgs>(OnNavigate);
}
private void SetTransparentBackground ()
private void SetTransparentBackground()
{
this.printButton.ImageTransparentColor = Color.White;
this.pdfButton.ImageTransparentColor = Color.White;
@ -72,38 +69,38 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -72,38 +69,38 @@ namespace ICSharpCode.Reports.Core.ReportViewer
this.backButton.ImageTransparentColor = Color.White;
this.lastPageButton.ImageTransparentColor = Color.White;
}
#endregion
public void RunReport (string fileName,ReportParameters parameters)
public void RunReport(string fileName, ReportParameters parameters)
{
if (String.IsNullOrEmpty(fileName)) {
throw new ArgumentNullException("fileName");
}
ReportModel model = ReportEngine.LoadReportModel(fileName);
this.RunReport(model,parameters);
this.RunReport(model, parameters);
}
public void RunReport (ReportModel reportModel,ReportParameters parameters)
public void RunReport(ReportModel reportModel, ReportParameters parameters)
{
if (reportModel == null) {
throw new ArgumentNullException("reportModel");
}
this.SetupViewer(reportModel);
if (reportModel.DataModel == GlobalEnums.PushPullModel.FormSheet) {
RunFormSheet(reportModel);
} else {
ReportEngine.CheckForParameters(reportModel,parameters);
this.dataManager = DataManagerFactory.CreateDataManager(reportModel,parameters);
RunDataReport (reportModel,dataManager);
ReportEngine.CheckForParameters(reportModel, parameters);
this.dataManager = DataManagerFactory.CreateDataManager(reportModel, parameters);
RunDataReport(reportModel, dataManager);
}
}
public void RunReport (ReportModel reportModel,DataTable dataTable,ReportParameters parameters)
public void RunReport(ReportModel reportModel, DataTable dataTable, ReportParameters parameters)
{
if (reportModel == null) {
throw new ArgumentNullException("reportModel");
@ -111,14 +108,14 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -111,14 +108,14 @@ namespace ICSharpCode.Reports.Core.ReportViewer
if (dataTable == null) {
throw new ArgumentNullException("dataTable");
}
ReportEngine.CheckForParameters(reportModel,parameters);
IDataManager dataManager = DataManagerFactory.CreateDataManager(reportModel,dataTable);
RunReport (reportModel,dataManager);
ReportEngine.CheckForParameters(reportModel, parameters);
IDataManager dataManager = DataManagerFactory.CreateDataManager(reportModel, dataTable);
RunReport(reportModel, dataManager);
}
public void RunReport (ReportModel reportModel,IList dataSource,ReportParameters parameters)
public void RunReport(ReportModel reportModel, IList dataSource, ReportParameters parameters)
{
if (reportModel == null) {
throw new ArgumentNullException("reportModel");
@ -126,14 +123,14 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -126,14 +123,14 @@ namespace ICSharpCode.Reports.Core.ReportViewer
if (dataSource == null) {
throw new ArgumentNullException("dataSource");
}
ReportEngine.CheckForParameters(reportModel,parameters);
IDataManager dataManager = DataManagerFactory.CreateDataManager(reportModel,dataSource);
RunReport (reportModel,dataManager);
ReportEngine.CheckForParameters(reportModel, parameters);
IDataManager dataManager = DataManagerFactory.CreateDataManager(reportModel, dataSource);
RunReport(reportModel, dataManager);
}
public void RunReport (ReportModel reportModel,IDataManager dataManager)
public void RunReport(ReportModel reportModel, IDataManager dataManager)
{
if (reportModel == null) {
throw new ArgumentNullException("reportModel");
@ -141,59 +138,60 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -141,59 +138,60 @@ namespace ICSharpCode.Reports.Core.ReportViewer
if (dataManager == null) {
throw new ArgumentNullException("dataManager");
}
this.SetupViewer(reportModel);
this.dataManager = dataManager;
RunDataReport(reportModel,dataManager);
RunDataReport(reportModel, dataManager);
}
#region Rendering
private void RunFormSheet (ReportModel reportModel)
private void RunFormSheet(ReportModel reportModel)
{
IReportCreator reportCreator = FormPageBuilder.CreateInstance(reportModel);
reportCreator.SectionRendering += new EventHandler<SectionRenderEventArgs>(PushPrinting);
reportCreator.PageCreated += OnPageCreated;
reportCreator.BuildExportList();
ShowCompleted ();
ShowCompleted();
}
private void RunDataReport (ReportModel reportModel,IDataManager data)
private void RunDataReport(ReportModel reportModel, IDataManager data)
{
IReportCreator reportCreator = DataPageBuilder.CreateInstance(reportModel,data);
IReportCreator reportCreator = DataPageBuilder.CreateInstance(reportModel, data);
reportCreator.SectionRendering += new EventHandler<SectionRenderEventArgs>(PushPrinting);
reportCreator.GroupHeaderRendering += new EventHandler<GroupHeaderEventArgs>(GroupHeaderRendering);
reportCreator.GroupFooterRendering += GroupFooterRendering;
reportCreator.RowRendering += new EventHandler<RowRenderEventArgs>(RowRendering);
reportCreator.PageCreated += OnPageCreated;
reportCreator.BuildExportList();
ShowCompleted();
}
#endregion
#region Events from worker
private void OnPageCreated (object sender, PageCreatedEventArgs e)
private void OnPageCreated(object sender, PageCreatedEventArgs e)
{
this.Pages.Add(e.SinglePage);
if (this.Pages.Count == 1) {
ShowSelectedPage();
this.pageNumber = 0;
}
}
private void PushPrinting (object sender,SectionRenderEventArgs e)
private void PushPrinting(object sender, SectionRenderEventArgs e)
{
// string sectionName = e.Section.Name;
}
/*
if (sectionName == ReportSectionNames.ReportHeader) {
Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportHeader);
@ -219,18 +217,17 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -219,18 +217,17 @@ namespace ICSharpCode.Reports.Core.ReportViewer
throw new WrongSectionException(sectionName);
}
*/
}
private void GroupHeaderRendering (object sender, GroupHeaderEventArgs ghea)
private void GroupHeaderRendering(object sender, GroupHeaderEventArgs ghea)
{
// Console.WriteLine("ReportViewer - GroupHeaderRendering :");
// BaseGroupedRow v = ghea.GroupHeader;
// v.BackColor = System.Drawing.Color.Red;
}
private void GroupFooterRendering ( object sender, GroupFooterEventArgs gfea)
private void GroupFooterRendering(object sender, GroupFooterEventArgs gfea)
{
// Console.WriteLine();
// Console.WriteLine("ReportViewer - GroupFooterRendering :");
@ -239,41 +236,40 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -239,41 +236,40 @@ namespace ICSharpCode.Reports.Core.ReportViewer
// BaseTextItem i = (BaseTextItem)v.Items[0];
// i.Text ="neuer text";
}
private void RowRendering (object sender,RowRenderEventArgs rrea)
private void RowRendering(object sender, RowRenderEventArgs rrea)
{
//Console.WriteLine("ReportViewer - RowRendering :");
}
#endregion
private void AdjustDrawArea()
{
if (this.reportSettings != null) {
this.drawingPanel.ClientSize = this.drawingPanel.ClientSize = new Size((int)(this.reportSettings.PageSize.Width * this.zoom),
(int)(this.reportSettings.PageSize.Height * this.zoom));
if (this.reportSettings != null) {
this.drawingPanel.ClientSize = this.drawingPanel.ClientSize = new Size((int)(this.reportSettings.PageSize.Width * this.zoom), (int)(this.reportSettings.PageSize.Height * this.zoom));
}
}
#region setup
private void SetupViewer (ReportModel reportModel)
private void SetupViewer(ReportModel reportModel)
{
this.pages = new PagesCollection();
this.reportSettings = reportModel.ReportSettings;
this.AdjustDrawArea();
}
private void ShowCompleted()
{
if (this.InvokeRequired) {
invokeDelegate updateControl = delegate(){};
invokeDelegate updateControl = delegate() { };
updateControl = ShowCompleted;
Invoke (updateControl);
Invoke(updateControl);
}
if (this.dataManager != null) {
this.dataManager.GetNavigator.Reset();
@ -285,26 +281,25 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -285,26 +281,25 @@ namespace ICSharpCode.Reports.Core.ReportViewer
this.UpdateToolStrip();
ShowSelectedPage();
}
#endregion
#region ToolStrip
private void InitZoomCombo ()
private void InitZoomCombo()
{
foreach (string s in GlobalLists.ZoomValues())
{
foreach (string s in GlobalLists.ZoomValues()) {
this.comboZoom.Items.Add(s);
}
this.comboZoom.SelectedIndex = this.comboZoom.FindString("100");
}
void comboZoomSelectedIndexChange(object sender, System.EventArgs e)
{
if (this.comboZoom.SelectedItem.ToString().IndexOf("%") > 0) {
string s1 = this.comboZoom.SelectedItem.ToString().Substring(0,this.comboZoom.SelectedItem.ToString().IndexOf("%"));
this.zoom = (float)Convert.ToDecimal(s1,CultureInfo.InvariantCulture) / 100;
string s1 = this.comboZoom.SelectedItem.ToString().Substring(0, this.comboZoom.SelectedItem.ToString().IndexOf("%"));
this.zoom = (float)Convert.ToDecimal(s1, CultureInfo.InvariantCulture) / 100;
} else {
string sel = this.comboZoom.SelectedItem.ToString();
switch (sel) {
@ -316,26 +311,25 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -316,26 +311,25 @@ namespace ICSharpCode.Reports.Core.ReportViewer
break;
}
}
this.Invalidate(true);
this.Update();
this.AdjustDrawArea();
if ((this.pages != null) && (pageNumber < pages.Count))
{
this.ShowSelectedPage();
}
EventHelper.Raise<EventArgs>(this.PreviewLayoutChanged,this,e);
if ((this.pages != null) && (pageNumber < pages.Count)) {
this.ShowSelectedPage();
}
EventHelper.Raise<EventArgs>(this.PreviewLayoutChanged, this, e);
}
private void Localize ()
private void Localize()
{
if (this.reportViewerMessages != null) {
this.firstPageButton.ToolTipText = this.reportViewerMessages.FirstPageMessage;
this.backButton.ToolTipText = this.reportViewerMessages.BackButtonText;
this.forwardButton.ToolTipText = this.reportViewerMessages.NextButtonMessage;
this.lastPageButton.ToolTipText = this.reportViewerMessages.LastPageMessage;
this.printButton.ToolTipText = this.reportViewerMessages.PrintButtonMessage;
this.comboZoom.ToolTipText = this.reportViewerMessages.ZoomMessage;
this.createPdfMenu.Text = this.reportViewerMessages.PdfFileMessage;
@ -343,32 +337,31 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -343,32 +337,31 @@ namespace ICSharpCode.Reports.Core.ReportViewer
// this.pagesCreatedMessage = this.reportViewerMessages.PagesCreatedMessage;
}
}
private void UpdateToolStrip ()
private void UpdateToolStrip()
{
if (this.InvokeRequired) {
invokeDelegate updateControl = delegate(){};
invokeDelegate updateControl = delegate() { };
updateControl = UpdateToolStrip;
Invoke (updateControl);
Invoke(updateControl);
}
if (this.toolStrip1 != null){
if (this.toolStrip1 != null) {
string str = String.Empty;
if (this.pages != null) {
str = String.Format (CultureInfo.CurrentCulture,
"of {0}",this.pages.Count);
str = String.Format(CultureInfo.CurrentCulture, "of {0}", this.pages.Count);
}
this.numericToolStripTextBox2.Text = (this.pageNumber+1).ToString(CultureInfo.CurrentCulture);
this.numericToolStripTextBox2.Text = (this.pageNumber + 1).ToString(CultureInfo.CurrentCulture);
this.pageInfoLabel.Text = str;
}
}
private void OnNavigate (object sender, PageNavigationEventArgs e)
private void OnNavigate(object sender, PageNavigationEventArgs e)
{
int i = e.PageNumber -1;
int i = e.PageNumber - 1;
if ((i > -1)) {
if (i == this.pageNumber) {
return;
@ -380,22 +373,22 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -380,22 +373,22 @@ namespace ICSharpCode.Reports.Core.ReportViewer
}
}
}
#endregion
#region Drawing
private void ShowSelectedPage ()
private void ShowSelectedPage()
{
if (this.InvokeRequired) {
invokeDelegate updateControl = delegate(){};
invokeDelegate updateControl = delegate() { };
updateControl = ShowSelectedPage;
Invoke (updateControl);
Invoke(updateControl);
}
if (this.pageNumber < this.pages.Count) {
ExporterPage sp = pages[this.pageNumber];
if (this.bitmap != null) {
this.bitmap.Dispose();
}
@ -405,60 +398,60 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -405,60 +398,60 @@ namespace ICSharpCode.Reports.Core.ReportViewer
}
this.UpdateToolStrip();
}
private void CenterDisplayPanel()
{
if (this.Width > drawingPanel.Width)
drawingPanel.Left = (this.Width - drawingPanel.Width) / 2;
else
drawingPanel.Left = 3;
}
private void CenterDisplayPanel()
{
if (this.Width > drawingPanel.Width)
drawingPanel.Left = (this.Width - drawingPanel.Width) / 2;
else
drawingPanel.Left = 3;
}
private void DrawingPanelPaint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(this.drawingPanel.BackColor);
CenterDisplayPanel();
if (this.bitmap != null) {
e.Graphics.DrawImage(this.bitmap,0,0);
e.Graphics.DrawImage(this.bitmap, 0, 0);
}
}
private Bitmap CreateBitmap (ExporterPage page)
private Bitmap CreateBitmap(ExporterPage page)
{
Bitmap bm = new Bitmap(this.drawingPanel.ClientSize.Width,this.drawingPanel.ClientSize.Height,System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Bitmap bm = new Bitmap(this.drawingPanel.ClientSize.Width, this.drawingPanel.ClientSize.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
using (Graphics gr = Graphics.FromImage(bm)) {
// Reset Transform to org. Value
gr.Clear(this.drawingPanel.BackColor);
// this.Invalidate();
gr.ScaleTransform(1F,1F);
gr.ScaleTransform(1f, 1f);
gr.Clear(this.drawingPanel.BackColor);
gr.ScaleTransform(this.zoom,this.zoom);
gr.ScaleTransform(this.zoom, this.zoom);
gr.TextRenderingHint = TextRenderingHint.AntiAlias;
gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
gr.InterpolationMode = InterpolationMode.High;
previewRenderer.Graphics = gr;
previewRenderer.Page = page;
previewRenderer.RenderOutput();
}
return bm;
}
#endregion
#region PageNavigation
private void CheckEnable ()
private void CheckEnable()
{
if ((this.pages == null)||(this.pages.Count == 0)) {
if ((this.pages == null) || (this.pages.Count == 0)) {
this.firstPageButton.Enabled = false;
this.forwardButton.Enabled = false;
this.backButton.Enabled = false;
@ -470,10 +463,10 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -470,10 +463,10 @@ namespace ICSharpCode.Reports.Core.ReportViewer
this.backButton.Enabled = true;
this.lastPageButton.Enabled = true;
}
}
private void FirstPageButtonClick(object sender, System.EventArgs e)
{
if ((this.pages != null) && (this.pageNumber > 0)) {
@ -482,75 +475,72 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -482,75 +475,72 @@ namespace ICSharpCode.Reports.Core.ReportViewer
this.CheckEnable();
this.ShowSelectedPage();
}
private void BackButtonClick(object sender, System.EventArgs e)
{
CheckEnable();
if (this.pageNumber > 0) {
this.pageNumber --;
this.pageNumber--;
} else {
this.pageNumber = this.pages.Count -1;
this.pageNumber = this.pages.Count - 1;
}
this.CheckEnable();
this.ShowSelectedPage();
}
private void ForwardButtonClick(object sender, System.EventArgs e)
{
if (this.pageNumber < this.pages.Count-1) {
this.pageNumber ++;
if (this.pageNumber < this.pages.Count - 1) {
this.pageNumber++;
} else {
this.pageNumber = 0;
}
CheckEnable();
this.ShowSelectedPage();
}
private void LastPageButtonClick(object sender, System.EventArgs e)
{
this.pageNumber = this.pages.Count -1;
this.pageNumber = this.pages.Count - 1;
CheckEnable();
this.ShowSelectedPage();
}
private void PrintButton(object sender, System.EventArgs e)
{
using (PrintDialog dlg = new PrintDialog()) {
DialogResult result = dlg.ShowDialog();
if (result==DialogResult.OK){
PrintRenderer printer = PrintRenderer.CreateInstance(this.pages,dlg.PrinterSettings);
if (result == DialogResult.OK) {
PrintRenderer printer = PrintRenderer.CreateInstance(this.pages, dlg.PrinterSettings);
printer.Start();
printer.RenderOutput();
printer.End();
}
}
}
private void PdfButtonClick(object sender, EventArgs e)
{
this.CreatePdf();
}
private void CreatePdf ()
private void CreatePdf()
{
using (SaveFileDialog saveDialog = new SaveFileDialog()){
using (SaveFileDialog saveDialog = new SaveFileDialog()) {
saveDialog.FileName = this.reportSettings.ReportName;
saveDialog.DefaultExt = "PDF";
saveDialog.ValidateNames = true;
if(saveDialog.ShowDialog() == DialogResult.OK){
using (PdfRenderer pdfRenderer = PdfRenderer.CreateInstance(this.reportSettings,
this.pages,
saveDialog.FileName,
true)) {
if (saveDialog.ShowDialog() == DialogResult.OK) {
using (PdfRenderer pdfRenderer = PdfRenderer.CreateInstance(this.reportSettings, this.pages, saveDialog.FileName, true)) {
pdfRenderer.Start();
pdfRenderer.RenderOutput();
pdfRenderer.End();
@ -558,18 +548,17 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -558,18 +548,17 @@ namespace ICSharpCode.Reports.Core.ReportViewer
}
}
}
#endregion
private void SetPages ()
private void SetPages()
{
this.pageNumber = 0;
this.CheckEnable();
}
public PagesCollection Pages
{
public PagesCollection Pages {
get {
if (this.pages == null) {
this.pages = new PagesCollection();
@ -577,15 +566,15 @@ namespace ICSharpCode.Reports.Core.ReportViewer @@ -577,15 +566,15 @@ namespace ICSharpCode.Reports.Core.ReportViewer
return this.pages;
}
}
public IReportViewerMessages Messages
{
get { return this.reportViewerMessages;}
set { this.reportViewerMessages = value;
public IReportViewerMessages Messages {
get { return this.reportViewerMessages; }
set {
this.reportViewerMessages = value;
Localize();
}
}
}
}

152
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WPF/FixedDocumentCreator.cs

@ -13,6 +13,7 @@ using System.Windows.Documents; @@ -13,6 +13,7 @@ using System.Windows.Documents;
using System.Windows.Media;
using ICSharpCode.Reports.Core.Exporter;
using ICSharpCode.Reports.Core.Globals;
namespace ICSharpCode.Reports.Core.WPF
{
@ -31,79 +32,154 @@ namespace ICSharpCode.Reports.Core.WPF @@ -31,79 +32,154 @@ namespace ICSharpCode.Reports.Core.WPF
Console.WriteLine("\tCreatepage with {0} items ",exporterPage.Items.Count);
FixedPage page = new FixedPage();
//http://www.bing.com/search?q=Convert+Windows+Forms+to+WPF&FORM=QSRE
foreach (var element in exporterPage.Items) {
var item = ItemFactory(element);
page.Children.Add(item);
}
CreatePageInternal (page,exporterPage.Items);
Console.WriteLine("\tPage created with with {0} items ",page.Children.Count);
return page;
}
void CreatePageInternal(FixedPage page, ExporterCollection items)
{
foreach (var element in items)
{
var cont = element as ExportContainer;
var item = ItemFactory(element);
if (item != null) {
page.Children.Add(item);
}
}
}
UIElement ItemFactory (BaseExportColumn column)
{
var text = column as ExportText;
Console.WriteLine(" Create {0}",column.ToString());
UIElement element = null;
var container = column as ExportContainer;
if (container != null) {
element = CreateContainer(column);
}
var text = column as ExportText;
if (text != null) {
element = CreateTextColumn(text);
}
return element;
}
private UIElement CreateContainer(BaseExportColumn column)
{
ExportContainer container = column as ExportContainer;
var canvas = new Canvas();
canvas.Width = column.StyleDecorator.DisplayRectangle.Width;
canvas.Height = column.StyleDecorator.DisplayRectangle.Height;
FixedPage.SetLeft(canvas,column.StyleDecorator.Location.X);
FixedPage.SetTop(canvas,column.StyleDecorator.Location.Y);
var conv = new BrushConverter();
SolidColorBrush b = conv.ConvertFromString(System.Drawing.Color.LightGray.Name) as SolidColorBrush;
canvas.Background = b;
foreach (var element in container.Items) {
var text = element as ExportText;
if (text != null)
{
var textBlock = CreateTextBlock (text);
// textBlock.ClipToBounds = true;
textBlock.TextWrapping = TextWrapping.Wrap;
Canvas.SetLeft(textBlock,element.StyleDecorator.Location.X - column.StyleDecorator.Location.X);
Canvas.SetTop(textBlock,element.StyleDecorator.Location.Y - column.StyleDecorator.Location.Y);
// var m = new System.Windows.Thickness(text.StyleDecorator.Location.X - column.StyleDecorator.Location.X,
// text.StyleDecorator.Location.Y - column.StyleDecorator.Location.Y,0,0);
// t.Margin = m;
Console.WriteLine("{0} - {1} - {2} ",textBlock.Text,textBlock.Width,textBlock.MaxWidth);
canvas.Children.Add(textBlock);
}
}
canvas.Measure(PageSize);
canvas.Arrange(new Rect(new System.Windows.Point(), PageSize));
canvas.UpdateLayout();
return canvas;
}
UIElement CreateTextColumn(ExportText et)
{
TextBlock tb = CreateTextBlock(et);
FixedPage.SetLeft(tb,et.StyleDecorator.Location.X );
FixedPage.SetTop(tb,et.StyleDecorator.Location.Y);
return tb;
}
TextBlock CreateTextColumn(ExportText et)
TextBlock CreateTextBlock(ExportText et)
{
TextBlock tb = new TextBlock();
tb.Text = et.Text;
SetFont(tb,et.StyleDecorator);
FixedPage.SetLeft(tb,et.StyleDecorator.Location.X );
FixedPage.SetTop(tb,et.StyleDecorator.Location.Y);
tb.Text = et.Text;
SetFont(tb, et.StyleDecorator);
tb.Width = et.StyleDecorator.DisplayRectangle.Width;
tb.Height = et.StyleDecorator.DisplayRectangle.Height;
tb.MaxHeight = et.StyleDecorator.DisplayRectangle.Height;
tb.MaxWidth = et.StyleDecorator.DisplayRectangle.Width;
return tb;
}
//points = pixels * 96 / 72
void SetFont(TextBlock tb, TextStyleDecorator styleDecorator)
{
//
//
// http://msdn.microsoft.com/en-us/library/system.windows.textdecorations.aspx
// http://stackoverflow.com/questions/637636/using-a-system-drawing-font-with-a-wpf-label
var s = NewTypeFaceFromFont (styleDecorator.Font);
// FontFamilyConverter conv = new FontFamilyConverter();
// var s = NewTypeFaceFromFont (styleDecorator.Font);
// FontFamilyConverter conv = new FontFamilyConverter();
// FontFamily mfont1 = conv.ConvertFromString(styleDecorator.Font.Name) as FontFamily;
// tb.FontFamily = mfont1;
tb.FontFamily = new FontFamily(styleDecorator.Font.FontFamily.Name);
tb.FontSize = styleDecorator.Font.GetHeight();
// var s = styleDecorator.Font.GetHeight();
// var a = s /97*72;
var b = styleDecorator.Font.Size;
//tb.FontSize = (int)styleDecorator.Font.GetHeight();
tb.FontSize = b * 96/72;
if (styleDecorator.Font.Bold) {
tb.FontWeight = FontWeights.Bold;
}
Console.WriteLine ("{0} - {1}",styleDecorator.Font.FontFamily.Name,styleDecorator.Font.GetHeight());
}
/*
using System.Drawing;
using Media = System.Windows.Media;
Font font = new Font(new System.Drawing.FontFamily("Comic Sans MS"), 10);
//option 1
Media.FontFamily mfont = new Media.FontFamily(font.Name);
//option 2 does the same thing
Media.FontFamilyConverter conv = new Media.FontFamilyConverter();
Media.FontFamily mfont1 = conv.ConvertFromString(font.Name) as Media.FontFamily;
//option 3
Media.FontFamily mfont2 = Media.Fonts.SystemFontFamilies.Where(x => x.Source == font.Name).FirstOrDefault();
private static Typeface NewTypeFaceFromFont(System.Drawing.Font f)
{ Typeface typeface = null;
FontFamily ff = new FontFamily(f.Name);
if (typeface == null)
{
typeface = new Typeface(ff, (f.Style == System.Drawing.FontStyle.Italic ? FontStyles.Italic : FontStyles.Normal),
(f.Style == System.Drawing.FontStyle.Bold ? FontWeights.Bold : FontWeights.Normal),
FontStretches.Normal);
}
if (typeface == null)
{
typeface = new Typeface(new FontFamily("Arial"),
FontStyles.Italic,
FontWeights.Normal,
FontStretches.Normal);
}
return typeface;
}
*/
public void ArrangePage(Size pageSize, FixedPage page)
{
Console.WriteLine("Arrange page with Size {0}",pageSize);
@ -111,6 +187,8 @@ namespace ICSharpCode.Reports.Core.WPF @@ -111,6 +187,8 @@ namespace ICSharpCode.Reports.Core.WPF
page.Arrange(new Rect(new System.Windows.Point(), pageSize));
page.UpdateLayout();
}
public System.Windows.Size PageSize {get;set;}
}
}

27
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WpfReportViewer/WpfReportViewer.xaml

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<UserControl
x:Class="ICSharpCode.Reports.Core.WpfReportViewer.WpfReportViewer" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Border
BorderBrush="Black"
BorderThickness="3"
CornerRadius="4">
<StackPanel
Orientation="Horizontal"
HorizontalAlignment="Stretch">
<StackPanel
Orientation=" Vertical"
Width="100">
<Button>Hallo 1</Button>
<Button>hallo 2</Button>
</StackPanel>
<DocumentViewer
x:Name="DocumentViewer"
Margin="20,20,20,20"
HorizontalAlignment="Stretch"
Background="White"
Width="984"></DocumentViewer>
</StackPanel>
</Border>
</Grid>
</UserControl>
Loading…
Cancel
Save