Browse Source

Show FormSheet Reports as Preview in Designer

reports
Peter Forstmeier 11 years ago
parent
commit
6dd1585ad8
  1. 17
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj
  2. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/SectionDesigner.cs
  3. 14
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/DesignerGenerator.cs
  4. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs
  5. 83
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDesignerLoader.cs
  6. 27
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/DesignerView.cs
  7. 64
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/WpfPreview.cs
  8. 6
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDesignerWriter.cs
  9. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ReportModelFactory.cs
  10. 4
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/ModelLoader.cs
  11. 8
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs
  12. 16
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/ReportDesignerLoader.cs

17
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj

@ -46,6 +46,12 @@ @@ -46,6 +46,12 @@
<Reference Include="Microsoft.CSharp">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="PresentationFramework">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
@ -57,10 +63,16 @@ @@ -57,10 +63,16 @@
<Reference Include="System.Design" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Folder Include="Configuration" />
@ -117,6 +129,7 @@ @@ -117,6 +129,7 @@
<Compile Include="src\TypeProvider\TextItemTypeProvider.cs" />
<Compile Include="src\TypeProvider\TypeProviderHelper.cs" />
<Compile Include="src\Views\DesignerView.cs" />
<Compile Include="src\Views\WpfPreview.cs" />
<Compile Include="src\Views\XmlView.cs" />
<Compile Include="src\XML\MycroWriter.cs" />
<Compile Include="src\XML\ReportDefinitionParser.cs" />
@ -154,10 +167,6 @@ @@ -154,10 +167,6 @@
<Project>{40CA84D4-ACFC-4646-9CDD-B87262D34093}</Project>
<Name>ICSharpCode.Reporting</Name>
</ProjectReference>
<ProjectReference Include="..\ICSharpCode.Reporting\ICSharpCode.Reporting.csproj">
<Project>{40CA84D4-ACFC-4646-9CDD-B87262D34093}</Project>
<Name>ICSharpCode.Reporting</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

1
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/SectionDesigner.cs

@ -63,7 +63,6 @@ namespace ICSharpCode.Reporting.Addin.Designer @@ -63,7 +63,6 @@ namespace ICSharpCode.Reporting.Addin.Designer
void OnSelectionChanged(object sender, EventArgs e)
{
Console.WriteLine("Section : OnSelectionChanged");
Control.Invalidate( );
}

14
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/DesignerGenerator.cs

@ -12,6 +12,7 @@ using System.IO; @@ -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 @@ -41,12 +42,13 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding
this.viewContent = viewContent;
}
public void Detach()
{
throw new NotImplementedException();
}
public System.Collections.Generic.IEnumerable<ICSharpCode.SharpDevelop.Workbench.OpenedFile> GetSourceFiles(out ICSharpCode.SharpDevelop.Workbench.OpenedFile designerCodeFile)
public System.Collections.Generic.IEnumerable<OpenedFile> GetSourceFiles(out OpenedFile designerCodeFile)
{
throw new NotImplementedException();
}
@ -61,15 +63,16 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding @@ -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 @@ -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
@ -97,8 +100,7 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding @@ -97,8 +100,7 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding
}
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();
}

3
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding @@ -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 @@ -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;
}

83
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDesignerLoader.cs

@ -7,13 +7,12 @@ @@ -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 @@ -21,10 +20,10 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding
/// <summary>
/// Description of ReportDesignerLoader.
/// </summary>
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 @@ -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 @@ -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
}
/// <summary>
/// Load Report from File
/// </summary>
/// <param name="baseType"></param>
/// <returns></returns>
public class aaReportLoader : ModelLoader
{
static Dictionary<Type, Type> baseToReport;
public static Type GetReportType(Type baseType)
{
Console.WriteLine("ReportLoader:GetReportType");
if (baseType == null) return null;
if (baseToReport == null) {
baseToReport = new Dictionary<Type, Type>();
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));
}
}
}

27
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/DesignerView.cs

@ -42,11 +42,6 @@ namespace ICSharpCode.Reporting.Addin.Views @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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

64
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/WpfPreview.cs

@ -0,0 +1,64 @@ @@ -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
{
/// <summary>
/// Description of the view content
/// </summary>
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);
}
/// <summary>
/// The <see cref="System.Windows.Forms.Control"/> representing the view
/// </summary>
public override object Control {
get {
return viewer;
}
}
protected override void SaveToPrimary()
{
LoggingService.Info("WpfPreview:SaveToPrimary is not implemented");
}
}
}

6
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDesignerWriter.cs

@ -13,8 +13,12 @@ namespace ICSharpCode.Reporting.Addin.XML @@ -13,8 +13,12 @@ namespace ICSharpCode.Reporting.Addin.XML
/// <summary>
/// Description of ReportDesignerWriter.
/// </summary>
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)) {

2
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ReportModelFactory.cs

@ -15,7 +15,7 @@ namespace ICSharpCode.Reporting.Factories @@ -15,7 +15,7 @@ namespace ICSharpCode.Reporting.Factories
/// <summary>
/// Description of ReportModelFactory.
/// </summary>
public class ReportModelFactory
public static class ReportModelFactory
{
public static ReportModel Create()
{

4
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/ModelLoader.cs

@ -26,6 +26,10 @@ namespace ICSharpCode.Reporting.Xml @@ -26,6 +26,10 @@ namespace ICSharpCode.Reporting.Xml
/// </summary>
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);

8
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs

@ -43,6 +43,10 @@ namespace ICSharpCode.Reporting.Xml @@ -43,6 +43,10 @@ namespace ICSharpCode.Reporting.Xml
/// </summary>
public abstract class MycroParser
{
public MycroParser() {
Console.WriteLine("Mycroparser");
Console.WriteLine();
}
public object Load(XmlElement element)
{
return ProcessNode(element, null);
@ -60,7 +64,9 @@ namespace ICSharpCode.Reporting.Xml @@ -60,7 +64,9 @@ 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.");

16
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/DesignerBinding/ReportDesignerLoader.cs

@ -150,16 +150,16 @@ namespace ICSharpCode.Reports.Addin @@ -150,16 +150,16 @@ namespace ICSharpCode.Reports.Addin
{
Console.WriteLine("ReportLoader:GetReportType");
if (baseType == null) return null;
if (baseToReport == null) {
baseToReport = new Dictionary<Type, Type>();
foreach (Type t in typeof(BaseSection).Assembly.GetTypes()) {
if (t.BaseType != null && t.BaseType.Name.StartsWith("Base",
StringComparison.InvariantCulture)) {
baseToReport[t.BaseType] = t;
}
baseToReport = new Dictionary<Type, Type>();
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;

Loading…
Cancel
Save