From 6dd1585ad84f485ccc73d3dfd275cb687dfa0a09 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Wed, 26 Mar 2014 22:31:34 +0100 Subject: [PATCH] Show FormSheet Reports as Preview in Designer --- .../ICSharpCode.Reporting.Addin.csproj | 17 +++- .../src/Designer/SectionDesigner.cs | 1 - .../src/DesignerBinding/DesignerGenerator.cs | 18 ++-- .../ReportDefinitionDeserializer.cs | 3 +- .../DesignerBinding/ReportDesignerLoader.cs | 83 +++---------------- .../src/Views/DesignerView.cs | 27 +++--- .../src/Views/WpfPreview.cs | 64 ++++++++++++++ .../src/XML/ReportDesignerWriter.cs | 6 +- .../Src/Factories/ReportModelFactory.cs | 2 +- .../Src/Xml/ModelLoader.cs | 4 + .../Src/Xml/MycroParser.cs | 10 ++- .../DesignerBinding/ReportDesignerLoader.cs | 14 ++-- 12 files changed, 134 insertions(+), 115 deletions(-) create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/WpfPreview.cs diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj index dd02ba201b..5eb28d82c7 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj @@ -46,6 +46,12 @@ 4.0 + + 3.0 + + + 3.0 + 3.5 @@ -57,10 +63,16 @@ + + 4.0 + 3.5 + + 3.0 + @@ -117,6 +129,7 @@ + @@ -154,10 +167,6 @@ {40CA84D4-ACFC-4646-9CDD-B87262D34093} ICSharpCode.Reporting - - {40CA84D4-ACFC-4646-9CDD-B87262D34093} - ICSharpCode.Reporting - \ No newline at end of file diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/SectionDesigner.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/SectionDesigner.cs index 9760b251d2..1cad23dfa5 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/SectionDesigner.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/SectionDesigner.cs @@ -63,7 +63,6 @@ namespace ICSharpCode.Reporting.Addin.Designer void OnSelectionChanged(object sender, EventArgs e) { - Console.WriteLine("Section : OnSelectionChanged"); Control.Invalidate( ); } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/DesignerGenerator.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/DesignerGenerator.cs index 97fc779f6d..23c65dff98 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/DesignerGenerator.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/DesignerGenerator.cs @@ -12,6 +12,7 @@ using System.IO; using System.Windows.Forms; using System.Xml; using ICSharpCode.Core; +using ICSharpCode.SharpDevelop.Workbench; using ICSharpCode.Reporting.Addin.DesignableItems; using ICSharpCode.Reporting.Addin.Globals; using ICSharpCode.Reporting.Addin.Views; @@ -41,12 +42,13 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding this.viewContent = viewContent; } + public void Detach() { throw new NotImplementedException(); } - public System.Collections.Generic.IEnumerable GetSourceFiles(out ICSharpCode.SharpDevelop.Workbench.OpenedFile designerCodeFile) + public System.Collections.Generic.IEnumerable GetSourceFiles(out OpenedFile designerCodeFile) { throw new NotImplementedException(); } @@ -61,15 +63,16 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding StringWriter InternalMergeFormChanges() { + Console.WriteLine("InternalMergeFormChanges create ReportdesignerWriter"); var writer = new StringWriterWithEncoding(System.Text.Encoding.UTF8); var xml = XmlHelper.CreatePropperWriter(writer); - - var rpd = new ReportDesignerWriter(); + + var reportDesignerWriter = new ReportDesignerWriter(); XmlHelper.CreatePropperDocument(xml); foreach (IComponent component in viewContent.Host.Container.Components) { if (!(component is Control)) { - rpd.Save(component,xml); + reportDesignerWriter.Save(component,xml); } } xml.WriteEndElement(); @@ -79,7 +82,7 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding foreach (var component in viewContent.Host.Container.Components) { var b = component as BaseSection; if (b != null) { - rpd.Save(component,xml); + reportDesignerWriter.Save(component,xml); } } //SectionCollection @@ -91,14 +94,13 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding return writer; } - + public DesignerView ViewContent { get {return viewContent;} } - - public bool InsertComponentEvent(System.ComponentModel.IComponent component, System.ComponentModel.EventDescriptor edesc, string eventMethodName, string body, out string file, out int position) + public bool InsertComponentEvent(IComponent component, EventDescriptor edesc, string eventMethodName, string body, out string file, out int position) { throw new NotImplementedException(); } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs index 8a706e0cd8..25d46216a4 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs @@ -44,7 +44,7 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding this.host = host; } - public XmlDocument LoadXmlFromStream(Stream stream) + public XmlDocument LoadXmlFromStream(Stream stream) { Console.Write("LoadXml"); if (stream == null) @@ -90,6 +90,7 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding { XmlNodeList nodes = elem.FirstChild.ChildNodes; var reportSettingsNode = (XmlElement)nodes[0]; + Console.Write("ReportDefinitionDeserializer create ModelLoader"); var modelLoader = new ModelLoader(); return modelLoader.Load(reportSettingsNode) as ReportSettings; } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDesignerLoader.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDesignerLoader.cs index 751c3d2e3e..faf846d0c3 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDesignerLoader.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDesignerLoader.cs @@ -7,13 +7,12 @@ * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; -using System.Collections.Generic; using System.ComponentModel.Design.Serialization; using System.IO; using System.Xml; using ICSharpCode.Core; +using ICSharpCode.Reporting.Factories; using ICSharpCode.Reporting.Items; -using ICSharpCode.Reporting.Xml; using ICSharpCode.Reporting.Addin.Services; namespace ICSharpCode.Reporting.Addin.DesignerBinding @@ -21,10 +20,10 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding /// /// Description of ReportDesignerLoader. /// - class ReportDesignerLoader: BasicDesignerLoader + public class ReportDesignerLoader: BasicDesignerLoader { IDesignerLoaderHost host; - IDesignerGenerator generator; + readonly IDesignerGenerator generator; ReportModel reportModel; Stream stream; @@ -61,9 +60,9 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding protected override void PerformLoad(IDesignerSerializationManager serializationManager){ var internalLoader = new InternalReportLoader(host,generator, stream); reportModel = internalLoader.LoadOrCreateReport(); -// reportModel = internalLoader.ReportModel; } + protected override void PerformFlush(IDesignerSerializationManager designerSerializationManager){ LoggingService.Info("ReportDesignerLoader:PerformFlush"); generator.MergeFormChanges((System.CodeDom.CodeCompileUnit)null); @@ -72,80 +71,18 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding #endregion - #region Reportmodel - - public ReportModel ReportModel { - get { return reportModel; } - } + #region Serialize to Xml - public static ReportModel CreateRenderableModel() + public XmlDocument SerializeModel() { - Console.WriteLine("ReportDesignerLoader:CreateRenderableModel"); - /* - ReportModel m = new ReportModel(); - generator.MergeFormChanges((System.CodeDom.CodeCompileUnit)null); - XmlDocument doc = new XmlDocument(); - doc.LoadXml(generator.ViewContent.ReportFileContent); - ReportLoader rl = new ReportLoader(); - object root = rl.Load(doc.DocumentElement); - m = root as ReportModel; - - m.ReportSettings.FileName = generator.ViewContent.PrimaryFileName; - FilePathConverter.AdjustReportName(m); - return m; - */ - return null; - } + Console.WriteLine("ReportDesignerLoader:SerializeModel:"); - public XmlDocument CreateXmlModel() - { - Console.WriteLine("ReportDesignerLoader:CreateXmlModel"); - /* - ReportModel m = new ReportModel(); generator.MergeFormChanges((System.CodeDom.CodeCompileUnit)null); - XmlDocument xmlDocument = new XmlDocument(); - xmlDocument.LoadXml(generator.ViewContent.ReportFileContent); - return xmlDocument; - */ - return null; + var doc = new XmlDocument(); + doc.LoadXml(generator.ViewContent.ReportFileContent); + return doc; } #endregion } - - /// - /// Load Report from File - /// - /// - /// - - public class aaReportLoader : ModelLoader - { - static Dictionary baseToReport; - - public static Type GetReportType(Type baseType) - { - Console.WriteLine("ReportLoader:GetReportType"); - if (baseType == null) return null; - if (baseToReport == null) { - baseToReport = new Dictionary(); - foreach (Type t in typeof(BaseSection).Assembly.GetTypes()) { - - if (t.BaseType != null && t.BaseType.Name.StartsWith("Base", - StringComparison.InvariantCulture)) { - baseToReport[t.BaseType] = t; - } - } - } - Type r; - baseToReport.TryGetValue(baseType, out r); - return r ?? baseType; - } - - - protected override Type GetTypeByName(string ns, string name) - { - return GetReportType(base.GetTypeByName(ns, name)); - } - } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/DesignerView.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/DesignerView.cs index 782dbb67a5..8079700a75 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/DesignerView.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/DesignerView.cs @@ -42,11 +42,6 @@ namespace ICSharpCode.Reporting.Addin.Views DefaultServiceContainer defaultServiceContainer; DesignSurface designSurface; - public DesignerView() - { - } - - public DesignerView (OpenedFile openedFile,IDesignerGenerator generator) : base(openedFile){ if (openedFile == null) { throw new ArgumentNullException("openedFile"); @@ -89,8 +84,8 @@ namespace ICSharpCode.Reporting.Addin.Views LoggingService.Info("Create ReportDesignerLoader"); - this.loader = new ReportDesignerLoader(generator,stream); - this.designSurface.BeginLoad(this.loader); + loader = new ReportDesignerLoader(generator, stream); + designSurface.BeginLoad(this.loader); if (!designSurface.IsLoaded) { // throw new FormsDesignerLoadException(FormatLoadErrors(designSurface)); LoggingService.Error("designer not loaded"); @@ -119,8 +114,6 @@ namespace ICSharpCode.Reporting.Addin.Views hasUnmergedChanges = false; - LoggingService.Info("Form Designer: END INITIALIZE"); - //---------------- LoggingService.Info("ReportDesigner LoadDesigner_End"); } @@ -159,6 +152,7 @@ namespace ICSharpCode.Reporting.Addin.Views static WindowsFormsDesignerOptionService CreateDesignerOptions() { LoggingService.Debug("ReportDesigner: CreateDesignerOptions..."); + var designerOptionService = new WindowsFormsDesignerOptionService(); designerOptionService.Options.Properties.Find("UseSmartTags", true).SetValue(designerOptionService, true); designerOptionService.Options.Properties.Find("ShowGrid", true).SetValue(designerOptionService, false); @@ -195,7 +189,7 @@ namespace ICSharpCode.Reporting.Addin.Views } } - private void MakeDirty() + void MakeDirty() { hasUnmergedChanges = true; PrimaryFile.MakeDirty(); @@ -208,9 +202,7 @@ namespace ICSharpCode.Reporting.Addin.Views void SelectionChangedHandler(object sender, EventArgs args) { var selectionService = (ISelectionService)sender; - Console.WriteLine("Sel service {0}",selectionService != null); var abstractItem = selectionService.PrimarySelection as AbstractItem; - Console.Write("SelectionChangedHandler:AbstractItem {0}",abstractItem != null); if (abstractItem != null) { if (String.IsNullOrEmpty(abstractItem.Site.Name)) { abstractItem.Site.Name = abstractItem.Name; @@ -272,9 +264,8 @@ namespace ICSharpCode.Reporting.Addin.Views void UpdatePropertyPadSelection(ISelectionService selectionService) { - Console.Write("UpdatePropertyPadSelection"); ICollection selection = selectionService.GetSelectedComponents(); - object[] selArray = new object[selection.Count]; + var selArray = new object[selection.Count]; selection.CopyTo(selArray, 0); propertyContainer.SelectedObjects = selArray; } @@ -367,15 +358,17 @@ namespace ICSharpCode.Reporting.Addin.Views { var xmlView = new XmlView(generator,this); SecondaryViewContents.Add(xmlView); + var preview = new WpfPreview(loader,this); + SecondaryViewContents.Add(preview); } public string ReportFileContent { get { if (IsDirty) { - this.MergeFormChanges(); + MergeFormChanges(); } - return this.reportFileContent; } - set { this.reportFileContent = value; } + return reportFileContent; } + set { reportFileContent = value; } } #endregion diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/WpfPreview.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/WpfPreview.cs new file mode 100644 index 0000000000..f14843ad21 --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/WpfPreview.cs @@ -0,0 +1,64 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 24.03.2014 + * Time: 20:02 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using ICSharpCode.Core; +using ICSharpCode.Reporting.Items; +using ICSharpCode.Reporting.WpfReportViewer; +using ICSharpCode.Reporting.Xml; +using ICSharpCode.SharpDevelop; +using ICSharpCode.SharpDevelop.Workbench; +using ICSharpCode.Reporting.Addin.DesignerBinding; + +namespace ICSharpCode.Reporting.Addin.Views +{ + /// + /// Description of the view content + /// + public class WpfPreview : AbstractSecondaryViewContent + { + ReportDesignerLoader designerLoader; + + ICSharpCode.Reporting.WpfReportViewer.WpfReportViewer viewer = new ICSharpCode.Reporting.WpfReportViewer.WpfReportViewer(); + + public WpfPreview(ReportDesignerLoader loader,IViewContent content):base(content) + { + LoggingService.Info("Create WpfPreview"); + this.designerLoader = loader; + TabPageText = "WpfPreview"; + } + + protected override void LoadFromPrimary() + { + LoggingService.Info("LoadFrompromary"); + + var xml = designerLoader.SerializeModel(); + var modelLoader = new ModelLoader(); + var reportmodel = modelLoader.Load(xml.DocumentElement) as ReportModel; + var reportingFactory = new ReportingFactory(); + var reportCreator = reportingFactory.ReportCreator(reportmodel); + reportCreator.BuildExportList(); + var previewViewModel = new PreviewViewModel (reportingFactory.ReportModel.ReportSettings,reportCreator.Pages); + viewer.SetBinding(previewViewModel); + } + /// + /// The representing the view + /// + public override object Control { + get { + return viewer; + } + } + + protected override void SaveToPrimary() + { + LoggingService.Info("WpfPreview:SaveToPrimary is not implemented"); + } + } + +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDesignerWriter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDesignerWriter.cs index 933c5c5f4c..ff91334c1e 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDesignerWriter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDesignerWriter.cs @@ -13,8 +13,12 @@ namespace ICSharpCode.Reporting.Addin.XML /// /// Description of ReportDesignerWriter. /// - public class ReportDesignerWriter:MycroWriter + class ReportDesignerWriter:MycroWriter { + public ReportDesignerWriter() { + Console.WriteLine("ReportDesignerWriter"); + Console.WriteLine(); + } protected override string GetTypeName(Type t) { if (t.BaseType != null && t.BaseType.Name.StartsWith("Base",StringComparison.InvariantCultureIgnoreCase)) { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ReportModelFactory.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ReportModelFactory.cs index 67df46d54d..9c553c0ae9 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ReportModelFactory.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ReportModelFactory.cs @@ -15,7 +15,7 @@ namespace ICSharpCode.Reporting.Factories /// /// Description of ReportModelFactory. /// - public class ReportModelFactory + public static class ReportModelFactory { public static ReportModel Create() { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/ModelLoader.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/ModelLoader.cs index d2bf83aac2..43dbac7575 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/ModelLoader.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/ModelLoader.cs @@ -26,6 +26,10 @@ namespace ICSharpCode.Reporting.Xml /// public class ModelLoader: MycroParser { + public ModelLoader() { + Console.WriteLine("ICSharpCode.Reporting.Xml.ModelLoader"); + Console.WriteLine(); + } protected override Type GetTypeByName(string ns, string name) { return typeof(BaseSection).Assembly.GetType(typeof(BaseSection).Namespace + "." + name); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs index a55b978966..8b49f6d80c 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs @@ -43,6 +43,10 @@ namespace ICSharpCode.Reporting.Xml /// public abstract class MycroParser { + public MycroParser() { + Console.WriteLine("Mycroparser"); + Console.WriteLine(); + } public object Load(XmlElement element) { return ProcessNode(element, null); @@ -60,9 +64,11 @@ namespace ICSharpCode.Reporting.Xml string cname=node.LocalName; Console.WriteLine ("ProcessNode(XmlNode node, object parent) {0}",cname); - + if (cname.StartsWith("BaseText")) { + Console.WriteLine("Found"); +} Type t=GetTypeByName(ns, cname); - + // Trace.Assert(t != null, "Type "+cname+" could not be determined."); // Debug.WriteLine("Looking for " + cname + " and got " + t.FullName); // Console.WriteLine("Looking for " + cname + " and got " + t.FullName); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/ReportDesignerLoader.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/ReportDesignerLoader.cs index e6132aedfe..51e1196abe 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/ReportDesignerLoader.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/ReportDesignerLoader.cs @@ -150,16 +150,16 @@ namespace ICSharpCode.Reports.Addin { Console.WriteLine("ReportLoader:GetReportType"); if (baseType == null) return null; - if (baseToReport == null) { - baseToReport = new Dictionary(); - foreach (Type t in typeof(BaseSection).Assembly.GetTypes()) { + + baseToReport = new Dictionary(); + foreach (Type t in typeof(BaseSection).Assembly.GetTypes()) { - if (t.BaseType != null && t.BaseType.Name.StartsWith("Base", - StringComparison.InvariantCulture)) { - baseToReport[t.BaseType] = t; - } + if (t.BaseType != null && t.BaseType.Name.StartsWith("Base", + StringComparison.InvariantCulture)) { + baseToReport[t.BaseType] = t; } } + Type r; baseToReport.TryGetValue(baseType, out r); return r ?? baseType;