From 476030722b0cdf6d97e9f63db3509c2ea2629339 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier <peter.forstmeier@t-online.de> Date: Mon, 17 Mar 2014 20:45:24 +0100 Subject: [PATCH] Display DesignSurface --- .../ICSharpCode.Reporting.Addin.csproj | 4 + .../src/DesignableItems/BaseSection.cs | 5 +- .../src/Designer/ReportRootDesigner.cs | 41 +++--- .../src/DesignerBinding/DesignerGenerator.cs | 2 +- .../DesignerBinding/InternalReportLoader.cs | 2 +- .../TypeProvider/SectionItemTypeProvider.cs | 78 +++++++++++ .../src/TypeProvider/TypeProviderHelper.cs | 132 ++++++++++++++++++ .../src/Views/DesignerView.cs | 19 ++- .../src/Views/XmlView.cs | 79 +++++++++++ 9 files changed, 334 insertions(+), 28 deletions(-) create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/SectionItemTypeProvider.cs create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/TypeProviderHelper.cs create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/XmlView.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 48fbf93a33..467e511943 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 @@ -70,6 +70,7 @@ <Folder Include="src\Designer" /> <Folder Include="src\Globals" /> <Folder Include="src\DesignableItems" /> + <Folder Include="src\TypeProvider" /> <Folder Include="src\XML" /> <Folder Include="src\Services" /> <Folder Include="src\Views" /> @@ -102,7 +103,10 @@ <Compile Include="src\Services\HelpService.cs" /> <Compile Include="src\Services\ToolboxService.cs" /> <Compile Include="src\Services\UIService.cs" /> + <Compile Include="src\TypeProvider\SectionItemTypeProvider.cs" /> + <Compile Include="src\TypeProvider\TypeProviderHelper.cs" /> <Compile Include="src\Views\DesignerView.cs" /> + <Compile Include="src\Views\XmlView.cs" /> <Compile Include="src\XML\MycroWriter.cs" /> <Compile Include="src\XML\ReportDefinitionParser.cs" /> <Compile Include="src\XML\ReportDesignerWriter.cs" /> diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseSection.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseSection.cs index 578dfd3b89..f32b21f037 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseSection.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseSection.cs @@ -9,13 +9,14 @@ using System; using System.ComponentModel; using System.Drawing; +using ICSharpCode.Reporting.Addin.TypeProvider; namespace ICSharpCode.Reporting.Addin.DesignableItems { /// <summary> /// Description of BaseSection. /// </summary> -// [TypeDescriptionProvider(typeof(SectionItemTypeProvider))] + [TypeDescriptionProvider(typeof(SectionItemTypeProvider))] [Designer(typeof(ICSharpCode.Reporting.Addin.Designer.SectionDesigner))] public class BaseSection:AbstractItem { @@ -23,7 +24,7 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems public BaseSection():base() { base.FrameColor = Color.Black; -// TypeDescriptor.AddProvider(new SectionItemTypeProvider(), typeof(BaseSection)); + TypeDescriptor.AddProvider(new SectionItemTypeProvider(), typeof(BaseSection)); } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/ReportRootDesigner.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/ReportRootDesigner.cs index 804efd530c..6b3f9e9763 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/ReportRootDesigner.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/ReportRootDesigner.cs @@ -28,6 +28,8 @@ using System.Windows.Forms; using System.Windows.Forms.Design; using ICSharpCode.Core; using ICSharpCode.Reporting.Addin.DesignableItems; +using ICSharpCode.Reporting.Addin.Globals; +using ICSharpCode.Reporting.Addin.TypeProvider; namespace ICSharpCode.Reporting.Addin.Designer { @@ -49,13 +51,14 @@ namespace ICSharpCode.Reporting.Addin.Designer public ReportRootDesigner() { - System.Console.WriteLine("Create RootDesigner"); + Console.WriteLine("Create RootDesigner"); +// Control.BackColor = Color.Chocolate; } - private void ShowMessage(Exception e) + void ShowMessage(Exception e) { - base.DisplayError(e); + DisplayError(e); var uiService = (IUIService)host.GetService(typeof(IUIService)); if (uiService != null) { uiService.ShowError(e); @@ -79,15 +82,15 @@ namespace ICSharpCode.Reporting.Addin.Designer { rootReportModel = host.Container.Components[0] as RootReportModel; rootReportModel.PageMargin = CalculateMargins(); - rootReportModel.Page = new Rectangle(new Point(0,0),this.reportSettings.PageSize); + rootReportModel.Page = new Rectangle(new Point(0,0), reportSettings.PageSize); rootReportModel.Landscape = this.reportSettings.Landscape; rootReportModel.Invalidate(); } - private Margins CalculateMargins () + Margins CalculateMargins () { - return new Margins(this.reportSettings.LeftMargin,reportSettings.RightMargin, + return new Margins(reportSettings.LeftMargin,reportSettings.RightMargin, reportSettings.TopMargin,reportSettings.BottomMargin); } @@ -143,7 +146,7 @@ namespace ICSharpCode.Reporting.Addin.Designer // strange (the property grid is empty). // - this.selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + selectionService = (ISelectionService)GetService(typeof(ISelectionService)); if (this.selectionService != null) { this.selectionService.SetSelectedComponents(new object[] {component}, SelectionTypes.Replace); @@ -171,13 +174,14 @@ namespace ICSharpCode.Reporting.Addin.Designer protected override void PostFilterProperties(IDictionary properties) { - /* - DesignerHelper.RemoveProperties(properties); - string [] s = new string[]{"Visible","BackColor","Text","MaximumSize","MinimumSize","Size", - "AutoScaleDimensions","DataBindings"}; - DesignerHelper.Remove(properties,s); + + TypeProviderHelper.RemoveProperties(properties); + var s = new string[]{"Visible","BackColor", + "Text","MaximumSize","MinimumSize", + "Size","AutoScaleDimensions", + "DataBindings"}; + TypeProviderHelper.Remove(properties,s); base.PostFilterProperties(properties); - */ } #endregion @@ -195,16 +199,17 @@ namespace ICSharpCode.Reporting.Addin.Designer void RecalculateSections() { int locY = 50; - if (this.reportSettings == null) { + if (reportSettings == null) { reportSettings = host.Container.Components[1] as ICSharpCode.Reporting.Items.ReportSettings; } - foreach (BaseSection s in sections) + foreach (BaseSection section in sections) { -// s.Location = new Point(this.reportSettings.LeftMargin,locY); -// locY = locY + s.Size.Height + GlobalsDesigner.GabBetweenSection; + section.Location = new Point(reportSettings.LeftMargin,locY); + locY = locY + section.Size.Height + DesignerGlobals.GabBetweenSection; + section.Invalidate(); } - this.Control.Invalidate(); + 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 4be70e5d79..26d14ebe7b 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 @@ -21,7 +21,7 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding /// <summary> /// Description of DesignerGenerator. /// </summary> - public class DesignerGenerator:IDesignerGenerator + class DesignerGenerator:IDesignerGenerator { DesignerView viewContent; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/InternalReportLoader.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/InternalReportLoader.cs index 04ace3ecfe..e6a506b80f 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/InternalReportLoader.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/InternalReportLoader.cs @@ -72,7 +72,7 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding } - private void UpdateStatusbar () + void UpdateStatusbar () { string message; if (this.generator.ViewContent.PrimaryFile.IsDirty) { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/SectionItemTypeProvider.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/SectionItemTypeProvider.cs new file mode 100644 index 0000000000..9b9377cfad --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/SectionItemTypeProvider.cs @@ -0,0 +1,78 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 17.03.2014 + * Time: 20:18 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using ICSharpCode.Reporting.Addin.DesignableItems; + +namespace ICSharpCode.Reporting.Addin.TypeProvider +{ + /// <summary> + /// Description of SectionItemTypeProvider. + /// </summary> + internal class SectionItemTypeProvider : TypeDescriptionProvider + { + public SectionItemTypeProvider() : base(TypeDescriptor.GetProvider(typeof(AbstractItem))) + { + } + + + public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) + { + ICustomTypeDescriptor td = base.GetTypeDescriptor(objectType,instance); + return new SectionItemDescriptor(td, instance); + } + } + + + internal class SectionItemDescriptor : CustomTypeDescriptor + { + + + public SectionItemDescriptor(ICustomTypeDescriptor parent, object instance) + : base(parent) + { + } + + + public override PropertyDescriptorCollection GetProperties() + { + return GetProperties(null); + } + + + public override PropertyDescriptorCollection GetProperties(Attribute[] attributes) + { + PropertyDescriptorCollection props = base.GetProperties(attributes); + List<PropertyDescriptor> allProperties = new List<PropertyDescriptor>(); + + TypeProviderHelper.AddDefaultProperties(allProperties,props); + PropertyDescriptor prop = null; + + prop = props.Find("SectionOffset",true); + allProperties.Add(prop); + + prop = props.Find("SectionMargin",true); + allProperties.Add(prop); + + prop = props.Find("DrawBorder",true); + allProperties.Add(prop); + + prop = props.Find("PageBreakAfter",true); + allProperties.Add(prop); + + prop = props.Find("Controls",true); + allProperties.Add(prop); + + prop = props.Find("FrameColor",true); + allProperties.Add(prop); + return new PropertyDescriptorCollection(allProperties.ToArray()); + } + } +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/TypeProviderHelper.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/TypeProviderHelper.cs new file mode 100644 index 0000000000..fbb06c83c0 --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/TypeProviderHelper.cs @@ -0,0 +1,132 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 17.03.2014 + * Time: 20:20 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; + +namespace ICSharpCode.Reporting.Addin.TypeProvider +{ + /// <summary> + /// Description of TypeProviderHelper. + /// </summary> + static class TypeProviderHelper + { + + public static void RemoveProperties (IDictionary properties) + { + if (properties == null){ + throw new ArgumentNullException("properties"); + } + properties.Remove("AccessibleDescription"); + properties.Remove("AccessibleName"); + properties.Remove("AccessibleRole"); + properties.Remove("AllowDrop"); + properties.Remove("Anchor"); + properties.Remove("AutoScroll"); + properties.Remove("AutoSize"); + properties.Remove("BackgroundImage"); + properties.Remove("BackgroundImageLayout"); + properties.Remove("Cursor"); + properties.Remove("CausesValidation"); + properties.Remove("ContextMenuStrip"); + properties.Remove("DataBindings"); + properties.Remove("Dock"); + + properties.Remove("Enabled"); + + properties.Remove("ImeMode"); + properties.Remove("Locked"); + properties.Remove("Padding"); + properties.Remove("RightToLeft"); + properties.Remove("TabIndex"); + properties.Remove("TabStop"); + properties.Remove("Tag"); + properties.Remove("UseWaitCursor"); + properties.Remove("Visible"); + } + + public static void Remove (IDictionary properties,string[] toRemove) + { + if (properties == null){ + throw new ArgumentNullException("properties"); + } + if (toRemove == null) { + throw new ArgumentNullException("toRemove"); + } + foreach (String str in toRemove) + { + properties.Remove(str); + } + } + + public static void AddDefaultProperties (List<PropertyDescriptor> allProperties, + PropertyDescriptorCollection props ) + { + PropertyDescriptor prop = props.Find("Location",true); + allProperties.Add(prop); + + prop = props.Find("Size",true); + allProperties.Add(prop); + + prop = props.Find("BackColor",true); + allProperties.Add(prop); + +// prop = props.Find ("VisibleInReport",true); +// allProperties.Add(prop); + + + // need this for Contextmenu's + prop = props.Find("ContextMenu",true); + allProperties.Add(prop); + } + + public static void AddTextBasedProperties (List<PropertyDescriptor> allProperties, + PropertyDescriptorCollection props) + { + PropertyDescriptor prop = props.Find("Font",true); + allProperties.Add(prop); + + prop = props.Find("FormatString",true); + allProperties.Add(prop); + + prop = props.Find("StringTrimming",true); + allProperties.Add(prop); + + prop = props.Find("ContentAlignment",true); + allProperties.Add(prop); + + prop = props.Find("CanGrow",true); + allProperties.Add(prop); + + prop = props.Find("CanShrink",true); + allProperties.Add(prop); + + prop = props.Find("DataType",true); + allProperties.Add(prop); + + prop = props.Find("RTL",true); + allProperties.Add(prop); + } + + public static void AddGraphicProperties (List<PropertyDescriptor> allProperties, + PropertyDescriptorCollection props) + { + PropertyDescriptor prop = null; + prop = props.Find("ForeColor",true); + allProperties.Add(prop); + + prop = props.Find("DashStyle",true); + allProperties.Add(prop); + + prop = props.Find("Thickness",true); + allProperties.Add(prop); + } + } +} 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 05c70393e5..747bfef5d6 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 @@ -17,11 +17,11 @@ using System.IO; using System.Windows.Forms; using System.Windows.Forms.Design; using ICSharpCode.Core; +using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Workbench; using ICSharpCode.Reporting.Addin.DesignableItems; using ICSharpCode.Reporting.Addin.DesignerBinding; using ICSharpCode.Reporting.Addin.Services; -using ICSharpCode.SharpDevelop.Gui; namespace ICSharpCode.Reporting.Addin.Views { @@ -75,8 +75,8 @@ namespace ICSharpCode.Reporting.Addin.Views defaultServiceContainer.AddService(typeof(ITypeResolutionService), new TypeResolutionService()); defaultServiceContainer.AddService(typeof(ITypeDiscoveryService),new TypeDiscoveryService()); - defaultServiceContainer.AddService(typeof(System.ComponentModel.Design.IMenuCommandService), - new ICSharpCode.Reporting.Addin.Services.MenuCommandService(panel,this.designSurface )); + defaultServiceContainer.AddService(typeof(IMenuCommandService), + new ICSharpCode.Reporting.Addin.Services.MenuCommandService(panel, designSurface)); defaultServiceContainer.AddService(typeof(MemberRelationshipService),new DefaultMemberRelationshipService()); defaultServiceContainer.AddService(typeof(OpenedFile),base.PrimaryFile); @@ -333,8 +333,9 @@ namespace ICSharpCode.Reporting.Addin.Views void SetupDesignSurface() { - Control c = null; - c = designSurface.View as Control; +// Control c = null; + var c = designSurface.View as Control; + c.BackColor = System.Drawing.Color.Green; c.Parent = panel; c.Dock = DockStyle.Fill; } @@ -348,7 +349,12 @@ namespace ICSharpCode.Reporting.Addin.Views LoggingService.Info("Finished merging form changes"); hasUnmergedChanges = false; } - + + void SetupSecondaryView() + { + var xmlView = new XmlView(generator,this); + SecondaryViewContents.Add(xmlView); + } public string ReportFileContent { get { @@ -385,6 +391,7 @@ namespace ICSharpCode.Reporting.Addin.Views LoggingService.Debug("ReportDesigner: Load from: " + file.FileName); base.Load(file, stream); LoadDesigner(stream); + SetupSecondaryView(); } #endregion } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/XmlView.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/XmlView.cs new file mode 100644 index 0000000000..8341f6180f --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/XmlView.cs @@ -0,0 +1,79 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 17.03.2014 + * Time: 20:08 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Windows.Forms; +using ICSharpCode.SharpDevelop; +using ICSharpCode.SharpDevelop.Workbench; +using ICSharpCode.Reporting.Addin.DesignerBinding; + + +namespace ICSharpCode.Reporting.Addin.Views +{ + /// <summary> + /// Description of XmlView. + /// </summary> + class XmlView : AbstractSecondaryViewContent + { + /// <summary> + /// The <see cref="System.Windows.Forms.Control"/> representing the view + /// </summary> + RichTextBox richTextBox = new RichTextBox(); + IDesignerGenerator generator; + + public XmlView(IDesignerGenerator generator,IViewContent content):base(content){ + if (generator == null) { + throw new ArgumentNullException("generator"); + } + if (content == null) { + throw new ArgumentNullException("content"); + } + this.generator = generator; + this.TabPageText = "XmlView"; + richTextBox.Dock = DockStyle.Fill; + richTextBox.BackColor = System.Drawing.SystemColors.Desktop; + richTextBox.ForeColor = System.Drawing.Color.White; + } + + #region overrides + + protected override void LoadFromPrimary() + { + richTextBox.Text = generator.ViewContent.ReportFileContent; + } + + protected override void SaveToPrimary() + { +// throw new NotImplementedException(); + } + + + public override object Control { + get { + return richTextBox; + } + } + + + /// <summary> + /// Cleans up all used resources + /// </summary> + public sealed override void Dispose() + { + try { + if (this.richTextBox != null) { + this.richTextBox.Dispose(); + } + } finally { + base.Dispose(); + } + } + + #endregion + } +}