1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
5
using System.Collections;
6
using System.Collections.Generic;
7
using System.ComponentModel.Design.Serialization;
11
using ICSharpCode.Reports.Core;
12
using ICSharpCode.Reports.Core.Globals;
13
using ICSharpCode.SharpDevelop;
15
namespace ICSharpCode.Reports.Addin
18
public class ReportDesignerLoader: BasicDesignerLoader
20
private IDesignerLoaderHost host;
21
private IDesignerGenerator generator;
22
private ReportModel reportModel;
23
private Stream stream;
27
public ReportDesignerLoader(IDesignerGenerator generator, Stream stream)
30
throw new ArgumentNullException("stream");
31
if (generator == null) {
32
throw new ArgumentNullException("generator");
34
this.generator = generator;
41
#region Overriden methods of BasicDesignerLoader
43
public override void BeginLoad(IDesignerLoaderHost host)
46
throw new ArgumentNullException("host");
49
host.AddService(typeof(ComponentSerializationService), new CodeDomComponentSerializationService((IServiceProvider)host));
50
host.AddService(typeof(IDesignerSerializationService), new DesignerSerializationService((IServiceProvider)host));
55
protected override void PerformLoad(IDesignerSerializationManager serializationManager)
57
InternalReportLoader internalLoader = new InternalReportLoader(this.host,generator, stream);
58
internalLoader.LoadOrCreateReport();
59
this.reportModel = internalLoader.ReportModel;
63
protected override void OnEndLoad(bool successful, ICollection errors)
65
base.OnEndLoad(successful, errors);
69
protected override void PerformFlush(IDesignerSerializationManager designerSerializationManager)
71
System.Diagnostics.Trace.WriteLine("ReportDesignerLoader:PerformFlush");
72
generator.MergeFormChanges((System.CodeDom.CodeCompileUnit)null);
80
public ReportModel ReportModel {
81
get { return reportModel; }
84
public ReportModel CreateRenderableModel()
86
ReportModel m = new ReportModel();
87
generator.MergeFormChanges((System.CodeDom.CodeCompileUnit)null);
88
XmlDocument doc = new XmlDocument();
89
doc.LoadXml(generator.ViewContent.ReportFileContent);
90
ReportLoader rl = new ReportLoader();
91
object root = rl.Load(doc.DocumentElement);
92
m = root as ReportModel;
94
m.ReportSettings.FileName = generator.ViewContent.PrimaryFileName;
95
FilePathConverter.AdjustReportName(m);
103
public override void Dispose()
105
// Always remove attached event handlers in Dispose.
114
/// Load Report from File
116
/// <param name="baseType"></param>
117
/// <returns></returns>
119
public class ReportLoader : BaseItemLoader
121
static Dictionary<Type, Type> baseToReport;
123
public static Type GetReportType(Type baseType)
125
if (baseType == null) return null;
126
if (baseToReport == null) {
127
baseToReport = new Dictionary<Type, Type>();
128
foreach (Type t in typeof(BaseSection).Assembly.GetTypes()) {
130
if (t.BaseType != null && t.BaseType.Name.StartsWith("Base",
131
StringComparison.InvariantCulture)) {
132
baseToReport[t.BaseType] = t;
137
baseToReport.TryGetValue(baseType, out r);
138
return r ?? baseType;
142
protected override Type GetTypeByName(string ns, string name)
144
return GetReportType(base.GetTypeByName(ns, name));