From 4661680fe1eb607e3628729b96dfc2f15e4f7308 Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Thu, 19 May 2011 20:49:48 +0200 Subject: [PATCH] Simple (textonly) reports as FixedDocument are working --- .../ReportViewerSecondaryView.cs | 2 +- .../Project/WPF/WPFReportPreview.cs | 100 ++--- .../ICSharpCode.Reports.Core.csproj | 10 +- .../ExportRenderer/FixedDocumentRenderer.cs | 27 +- .../Exporter/ExportRenderer/PdfRenderer.cs | 6 - .../Project/Interfaces/IMeasurementService.cs | 16 - .../Project/ReportEngine.cs | 67 +-- .../Project/ReportViewer/IPreviewControl.cs | 31 ++ .../Project/ReportViewer/ReportViewer.cs | 411 +++++++++--------- .../Project/WPF/FixedDocumentCreator.cs | 152 +++++-- .../WpfReportViewer/WpfReportViewer.xaml | 27 ++ 11 files changed, 432 insertions(+), 417 deletions(-) delete mode 100644 src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IMeasurementService.cs create mode 100644 src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/IPreviewControl.cs create mode 100644 src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WpfReportViewer/WpfReportViewer.xaml diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/SecondaryViews/ReportViewerSecondaryView.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/SecondaryViews/ReportViewerSecondaryView.cs index 7fded46ba2..cd3c768059 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/SecondaryViews/ReportViewerSecondaryView.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/SecondaryViews/ReportViewerSecondaryView.cs @@ -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 { ReportModel model = designerLoader.CreateRenderableModel(); AbstractPreviewCommand cmd = null; + switch (model.DataModel) { case GlobalEnums.PushPullModel.FormSheet : { cmd = new FormSheetToReportViewerCommand (model,control); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/WPF/WPFReportPreview.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/WPF/WPFReportPreview.cs index 179ae26327..6d22e71d3b 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/WPF/WPFReportPreview.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/WPF/WPFReportPreview.cs @@ -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 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(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(); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj index 20476b3df5..f263aad551 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj @@ -294,7 +294,6 @@ - @@ -314,6 +313,7 @@ Component + Component @@ -368,6 +368,10 @@ ReportViewer.cs + + WpfReportViewer.xaml + Code + @@ -390,7 +394,11 @@ + + + + \ No newline at end of file diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/FixedDocumentRenderer.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/FixedDocumentRenderer.cs index 4bd9149004..81d6ad5bc9 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/FixedDocumentRenderer.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/FixedDocumentRenderer.cs @@ -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 // 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- //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- Console.WriteLine("FixedDocumentRenderer - End"); } - public Size PageSize {get;private set;} public IDocumentPaginatorSource Document {get;private set;} #endregion diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/PdfRenderer.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/PdfRenderer.cs index 3a0f040566..47c6962a00 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/PdfRenderer.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/PdfRenderer.cs @@ -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); -// } } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IMeasurementService.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IMeasurementService.cs deleted file mode 100644 index 24d772f3b8..0000000000 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IMeasurementService.cs +++ /dev/null @@ -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 -{ - /// - /// Description of IMeasurementService. - /// -// public interface IMeasurementService -// { -// void FitSectionToItems (Graphics graphics,BaseSection section); -// } -} diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportEngine.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportEngine.cs index 9b061e687e..0cfa0c733f 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportEngine.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportEngine.cs @@ -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; - } - - - - /// - /// Return a valid - /// - /// - /// - 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 /// @@ -528,7 +477,7 @@ namespace ICSharpCode.Reports.Core { /// /// - public static IReportCreator CreatePageBuilder (IReportModel reportModel, + public static IReportCreator CreatePageBuilder (IReportModel reportModel, DataTable dataTable, ReportParameters reportParameters) { @@ -557,8 +506,8 @@ namespace ICSharpCode.Reports.Core { /// /// 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 { } } - -// public ConnectionObject ConnectionObject { -// get { -// return connectionObject; -// } -// set { -// connectionObject = value; -// } -// } - #endregion diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/IPreviewControl.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/IPreviewControl.cs new file mode 100644 index 0000000000..32eca27f5a --- /dev/null +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/IPreviewControl.cs @@ -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; } + } +} diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/ReportViewer.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/ReportViewer.cs index 55bdd58e66..13901bea77 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/ReportViewer.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/ReportViewer.cs @@ -21,49 +21,46 @@ namespace ICSharpCode.Reports.Core.ReportViewer /// /// Description of UserControl1. /// - public partial class PreviewControl + public partial class PreviewControl : IPreviewControl { - public event EventHandler PreviewLayoutChanged; + public event EventHandler 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 (OnNavigate); + + this.numericToolStripTextBox2.Navigate += new EventHandler(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 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 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 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 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(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(PushPrinting); reportCreator.GroupHeaderRendering += new EventHandler(GroupHeaderRendering); reportCreator.GroupFooterRendering += GroupFooterRendering; - + reportCreator.RowRendering += new EventHandler(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 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 // 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 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 break; } } - + this.Invalidate(true); this.Update(); this.AdjustDrawArea(); - if ((this.pages != null) && (pageNumber < pages.Count)) - { - this.ShowSelectedPage(); - } - EventHelper.Raise(this.PreviewLayoutChanged,this,e); + if ((this.pages != null) && (pageNumber < pages.Count)) { + this.ShowSelectedPage(); + } + EventHelper.Raise(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 // 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 } } } - + #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 } 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 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 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 } } } - + #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 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(); } } - + } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WPF/FixedDocumentCreator.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WPF/FixedDocumentCreator.cs index a5adcb0bf1..c12870b168 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WPF/FixedDocumentCreator.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WPF/FixedDocumentCreator.cs @@ -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 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 page.Arrange(new Rect(new System.Windows.Point(), pageSize)); page.UpdateLayout(); } - + + + public System.Windows.Size PageSize {get;set;} } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WpfReportViewer/WpfReportViewer.xaml b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WpfReportViewer/WpfReportViewer.xaml new file mode 100644 index 0000000000..37880f11e5 --- /dev/null +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WpfReportViewer/WpfReportViewer.xaml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + \ No newline at end of file