From deae522a23e561a2991aa7121640aa5e412accbb Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Thu, 17 Apr 2014 20:15:25 +0200 Subject: [PATCH] Circle as Container --- .../ICSharpCode.Reporting.Addin.csproj | 3 +- .../src/DesignableItems/BaseCircleItem.cs | 48 +++++++++++++ .../src/DesignableItems/BaseRectangleItem.cs | 19 ----- .../src/Toolbox/ToolboxProvider.cs | 39 ++++++++--- .../TypeProvider/CircleItemTypeProvider.cs | 64 +++++++++++++++++ .../ICSharpCode.Reporting.csproj | 1 + .../PageBuilder/ExportColumns/ExportCircle.cs | 7 +- .../ExportColumns/ExportRectangle.cs | 4 +- .../ExportColumns/GraphicsContainer.cs | 21 ++++++ .../Src/Wpf/Visitor/WpfVisitor.cs | 70 +++++++++++++------ 10 files changed, 217 insertions(+), 59 deletions(-) create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseCircleItem.cs create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/CircleItemTypeProvider.cs create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/GraphicsContainer.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 0a3280f228..94bc640d84 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 @@ -76,7 +76,6 @@ - @@ -96,6 +95,7 @@ + @@ -135,6 +135,7 @@ + diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseCircleItem.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseCircleItem.cs new file mode 100644 index 0000000000..74393bce57 --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseCircleItem.cs @@ -0,0 +1,48 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 17.04.2014 + * Time: 19:53 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.ComponentModel; +using System.Drawing; +using ICSharpCode.Reporting.Addin.Designer; +using ICSharpCode.Reporting.Addin.TypeProvider; + + +namespace ICSharpCode.Reporting.Addin.DesignableItems +{ + /// + /// Description of BaseCircleItem. + /// + /// + [Designer(typeof(ContainerDesigner))] + class BaseCircleItem:AbstractGraphicItem + { + public BaseCircleItem() + { + TypeDescriptor.AddProvider(new CircleItemTypeProvider(), typeof(BaseCircleItem)); + } + + + public override void Draw(Graphics graphics) + { + if (graphics == null) { + throw new ArgumentNullException("graphics"); + } + + var rect = new Rectangle(ClientRectangle.Left, + ClientRectangle.Top, + ClientRectangle.Right -1, + ClientRectangle.Bottom -1); + + using (var pen = new Pen(ForeColor,Thickness)) { + graphics.DrawEllipse(pen,rect); + } + + } + } +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseRectangleItem.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseRectangleItem.cs index 2c3e4fd67d..34cce317e6 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseRectangleItem.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseRectangleItem.cs @@ -42,25 +42,6 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems graphics.DrawRectangle(pen,rect); } - -// backgroundShape.FillShape(graphics, -// new SolidFillPattern(this.BackColor), -// rect); - -// Border b = new Border(new BaseLine (this.ForeColor,System.Drawing.Drawing2D.DashStyle.Solid,1)); -// DrawFrame(graphics,b); -// BaseLine line = new BaseLine(base.ForeColor,DashStyle,Thickness,LineCap.Round,LineCap.Round,DashCap.Round); -// using (Pen pen = line.CreatePen(line.Thickness)){ -// shape.CornerRadius = this.CornerRadius; -// GraphicsPath path1 = shape.CreatePath(rect); -// graphics.DrawPath(pen, path1); -// -// } - -// shape.DrawShape (graphics, -// this.Baseline(), -// rect); - } } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Toolbox/ToolboxProvider.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Toolbox/ToolboxProvider.cs index f116a8f284..23db0c9f03 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Toolbox/ToolboxProvider.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Toolbox/ToolboxProvider.cs @@ -70,23 +70,29 @@ namespace ICSharpCode.Reporting.Addin.Toolbox }; sideTab.Items.Add(new SideTabItemDesigner(toolboxItem)); - - //Grahics + // Line toolboxItem = new ToolboxItem(typeof(BaseLineItem)) { DisplayName = ResourceService.GetString("SharpReport.Toolbar.Line"), Bitmap = IconService.GetBitmap("Icons.16.16.SharpReport.Line") }; - sideTab.Items.Add(new SideTabItemDesigner(toolboxItem)); - // Rectangle + // Rectangle toolboxItem = new ToolboxItem(typeof(BaseRectangleItem)) { DisplayName = ResourceService.GetString("SharpReport.Toolbar.Rectangle"), Bitmap = RectangleBitmap() }; sideTab.Items.Add(new SideTabItemDesigner(toolboxItem)); + + //Circle + toolboxItem = new ToolboxItem(typeof(BaseCircleItem)) { + DisplayName = ResourceService.GetString("SharpReport.Toolbar.Circle"), + Bitmap = CircleBitmap() + }; + sideTab.Items.Add(new SideTabItemDesigner(toolboxItem)); + /* //GroupHeader tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.GroupHeader)); @@ -117,13 +123,6 @@ namespace ICSharpCode.Reporting.Addin.Toolbox //Grahics - // Circle - tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.BaseCircleItem)); - tb.DisplayName = ResourceService.GetString("SharpReport.Toolbar.Circle"); - tb.Bitmap = GlobalValues.CircleBitmap(); - sideTab.Items.Add(new SideTabItemDesigner(tb)); - - // Image tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.BaseImageItem)); tb.DisplayName = ResourceService.GetString("SharpReport.Toolbar.Image"); @@ -142,6 +141,24 @@ namespace ICSharpCode.Reporting.Addin.Toolbox } return b; } + + + /// + /// ToolboxIcon for ReportCircle + /// + /// Bitmap + static Bitmap CircleBitmap() + { + Bitmap b = new Bitmap (19,19); + using (Graphics g = Graphics.FromImage (b)){ + g.DrawEllipse (new Pen(Color.Black, 1), + 1,1, + 17,17); + } + return b; + } + + static SideTabItem CreateToolboxPointer(SideTab sideTab) { var pointer = new SharpDevelopSideTabItem("Pointer") { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/CircleItemTypeProvider.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/CircleItemTypeProvider.cs new file mode 100644 index 0000000000..bb84b9472c --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/CircleItemTypeProvider.cs @@ -0,0 +1,64 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 17.04.2014 + * Time: 19:57 + * + * 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 +{ + /// + /// Description of CircleItemTypeProvider. + /// + class CircleItemTypeProvider: TypeDescriptionProvider + { + public CircleItemTypeProvider(): base(TypeDescriptor.GetProvider(typeof(AbstractItem))) + { + } + + + public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) + { + ICustomTypeDescriptor td = base.GetTypeDescriptor(objectType,instance); + return new CircleItemTypeDescriptor(td, instance); + } + } + + + class CircleItemTypeDescriptor : CustomTypeDescriptor + { + + public CircleItemTypeDescriptor(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 allProperties = new List(); + + TypeProviderHelper.AddDefaultProperties(allProperties,props); + TypeProviderHelper.AddGraphicProperties(allProperties,props); + + PropertyDescriptor prop = null; + + prop = props.Find("Controls",true); + allProperties.Add(prop); + + return new PropertyDescriptorCollection(allProperties.ToArray()); + } + } +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj index d4f76cbaa2..aa821d7fd8 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj @@ -168,6 +168,7 @@ + diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportCircle.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportCircle.cs index 899cd5e67c..d4b7102668 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportCircle.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportCircle.cs @@ -25,11 +25,8 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns /// /// Description of ExportCircle. /// - public class ExportCircle:ExportColumn,IExportGraphics,IAcceptor + public class ExportCircle:GraphicsContainer,IExportGraphics,IAcceptor { - public ExportCircle() - { - } public void Accept(IVisitor visitor) @@ -43,7 +40,7 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns throw new NotImplementedException(); } - public int Thickness {get;set;} +// public int Thickness {get;set;} public DashStyle DashStyle {get;set;} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportRectangle.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportRectangle.cs index d65e3819ee..c59099d31e 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportRectangle.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportRectangle.cs @@ -24,10 +24,8 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns /// /// Description of ExportRectangle. /// - public class ExportRectangle:ExportContainer,IExportGraphics + public class ExportRectangle:GraphicsContainer,IExportGraphics { - - public int Thickness {get;set;} public DashStyle DashStyle {get;set;} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/GraphicsContainer.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/GraphicsContainer.cs new file mode 100644 index 0000000000..53101dee7b --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/GraphicsContainer.cs @@ -0,0 +1,21 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 16.04.2014 + * Time: 19:53 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; + +namespace ICSharpCode.Reporting.PageBuilder.ExportColumns +{ + /// + /// Description of GraphicsContainer. + /// + public class GraphicsContainer:ExportContainer + { + + public int Thickness {get;set;} + } +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs index de1184723c..edb8ff0a33 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs @@ -63,8 +63,8 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor var canvas = FixedDocumentCreator.CreateContainer(container); foreach (var element in container.ExportedItems) { if (IsContainer(element)) { - if (element is ExportRectangle) { - var graphContainer = RenderGraphicsContainer((IExportContainer)element); + if (IsGraphicsContainer(element)) { + var graphContainer = RenderGraphicsContainer(element); canvas.Children.Add(graphContainer); } } else { @@ -78,20 +78,24 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor } - bool IsContainer (IExportColumn column) { - return (column is ExportContainer)|| (column is ExportRectangle); - } - - - Canvas RenderGraphicsContainer(IExportContainer container) + Canvas RenderGraphicsContainer(IExportColumn column) { - var rect = container as ExportRectangle; - var graphCanvas = FixedDocumentCreator.CreateContainer(rect); - CanvasHelper.SetPosition(graphCanvas, container.Location.ToWpf()); - graphCanvas.Background = FixedDocumentCreator.ConvertBrush(container.BackColor); - if (rect != null) { - Visit(rect); + var graphicsContainer = column as GraphicsContainer; + var graphCanvas = FixedDocumentCreator.CreateContainer(graphicsContainer); + CanvasHelper.SetPosition(graphCanvas, column.Location.ToWpf()); + graphCanvas.Background = FixedDocumentCreator.ConvertBrush(column.BackColor); + if (graphicsContainer != null) { + var rect = column as ExportRectangle; + if (rect != null) { + Visit(rect); + } + + var circle = column as ExportCircle; + if (circle != null) { + Visit(circle); + } + graphCanvas.Children.Add(UIElement); } return graphCanvas; @@ -133,12 +137,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor public override void Visit(ExportRectangle exportRectangle) { - var border = new Border(); - border.BorderThickness = new Thickness(exportRectangle.Thickness); - border.BorderBrush = FixedDocumentCreator.ConvertBrush(exportRectangle.ForeColor); - border.Background = FixedDocumentCreator.ConvertBrush(exportRectangle.BackColor); - border.Width = exportRectangle.Size.Width; - border.Height = exportRectangle.Size.Height; + var border = CreateBorder(exportRectangle); CanvasHelper.SetPosition(border, new Point(0,0)); var sp = new StackPanel(); sp.Orientation = Orientation.Horizontal; @@ -172,11 +171,42 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor var dragingElement = new DrawingElement(visual); UIElement = dragingElement; } + + + bool IsGraphicsContainer (IExportColumn column) { + return column is GraphicsContainer; + } + + + bool IsContainer (IExportColumn column) { + return (column is ExportContainer)|| (column is GraphicsContainer); + } + + + Border CreateBorder(IExportColumn exportColumn) + { + double bT; + var gc = IsGraphicsContainer(exportColumn); + if (!IsGraphicsContainer(exportColumn)) { + bT = 1; + } else { + bT = Convert.ToDouble(((GraphicsContainer)exportColumn).Thickness); + } + var border = new Border(); + border.BorderThickness = new Thickness(bT); + border.BorderBrush = FixedDocumentCreator.ConvertBrush(exportColumn.ForeColor); + border.Background = FixedDocumentCreator.ConvertBrush(exportColumn.BackColor); + border.Width = exportColumn.Size.Width; + border.Height = exportColumn.Size.Height; + return border; + } + static Point CalcRad(System.Drawing.Size size) { return new Point(size.Width /2,size.Height /2); } + protected UIElement UIElement {get;private set;}