From becafdae901607ef5d429b341e1712740e19acfb Mon Sep 17 00:00:00 2001 From: dgis Date: Sun, 21 Feb 2016 22:45:23 +0100 Subject: [PATCH] Improve the documentation layout on the diagram. --- XSDDiagrams/Rendering/Diagram.cs | 15 -------------- XSDDiagrams/Rendering/DiagramGdiRenderer.cs | 11 ++++------ XSDDiagrams/Rendering/DiagramItem.cs | 2 +- XSDDiagrams/Rendering/DiagramSvgRenderer.cs | 23 ++++++++++++++++++--- 4 files changed, 25 insertions(+), 26 deletions(-) diff --git a/XSDDiagrams/Rendering/Diagram.cs b/XSDDiagrams/Rendering/Diagram.cs index afc8ff1..4d7e2f5 100644 --- a/XSDDiagrams/Rendering/Diagram.cs +++ b/XSDDiagrams/Rendering/Diagram.cs @@ -437,21 +437,6 @@ namespace XSDDiagram.Rendering { string fontName = "Arial"; // "Verdana"; // "Arial"; - //if (_font != null) - //{ - // _font.Dispose(); - //} - //if (_smallFont != null) - //{ - // _smallFont.Dispose(); - //} - //if (_documentationFont != null) - //{ - // _documentationFont.Dispose(); - //} - //_font = new Font(fontName, 10.0f * (float)Math.Pow(_scale, 2.0), FontStyle.Bold, GraphicsUnit.Pixel); - //_smallFont = new Font(fontName, 9.0f * (float)Math.Pow(_scale, 2.0), GraphicsUnit.Pixel); - //_documentationFont = new Font(fontName, 10.0f * (float)Math.Pow(_scale, 2.0), GraphicsUnit.Pixel); if (_font == null) { _font = new Font(fontName, 10.0f, FontStyle.Bold, GraphicsUnit.Pixel); diff --git a/XSDDiagrams/Rendering/DiagramGdiRenderer.cs b/XSDDiagrams/Rendering/DiagramGdiRenderer.cs index 31a2688..520fe9d 100644 --- a/XSDDiagrams/Rendering/DiagramGdiRenderer.cs +++ b/XSDDiagrams/Rendering/DiagramGdiRenderer.cs @@ -159,18 +159,19 @@ namespace XSDDiagram.Rendering Rectangle scaledElementBox = drawingItem.ScaleRectangle(drawingItem.ElementBox); // Draw the children lines - if (drawingItem.ShowChildElements) + if (drawingItem.ShowChildElements && drawingItem.ChildElements.Count > 0) { Pen foregroundInheritPen = new Pen(foreground); foregroundInheritPen.StartCap = LineCap.Round; foregroundInheritPen.EndCap = LineCap.Round; - if (drawingItem.ChildElements.Count == 1) + bool showDocumentation = (drawingItem.Diagram.ShowDocumentation && drawingItem.DocumentationBox != null); + if (drawingItem.ChildElements.Count == 1 && !showDocumentation) { int parentMidleY = drawingItem.ScaleInt(drawingItem.Location.Y + drawingItem.Size.Height / 2); _graphics.DrawLine(foregroundInheritPen, drawingItem.ScaleInt(drawingItem.Location.X + drawingItem.Size.Width), parentMidleY, drawingItem.ScaleInt(drawingItem.ChildElements[0].Location.X), parentMidleY); } - else if (drawingItem.ChildElements.Count > 1) + else if (drawingItem.ChildElements.Count > 1 || showDocumentation) { DiagramItem firstElement = drawingItem.ChildElements[0]; DiagramItem lastElement = drawingItem.ChildElements[drawingItem.ChildElements.Count - 1]; @@ -497,10 +498,6 @@ namespace XSDDiagram.Rendering stringFormatText.Trimming = StringTrimming.EllipsisCharacter; stringFormatText.FormatFlags |= StringFormatFlags.NoClip; //MONOFIX - //_graphics.DrawString(text, drawingItem.Font, foreground - // , new RectangleF(scaledElementBox.X - drawingItem.Diagram.Scale * 5.0f, scaledElementBox.Y + scaledElementBox.Height + drawingItem.Diagram.Scale * 12.0f - // , scaledElementBox.Width + drawingItem.Diagram.Scale * 10.0f, 2.0f * scaledElementBox.Height) - // , stringFormatText); Rectangle scaledDocumentationBox = drawingItem.ScaleRectangle(drawingItem.DocumentationBox); if (drawingItem.Diagram.ShowBoundingBox) { diff --git a/XSDDiagrams/Rendering/DiagramItem.cs b/XSDDiagrams/Rendering/DiagramItem.cs index 3f5fe0e..2126789 100644 --- a/XSDDiagrams/Rendering/DiagramItem.cs +++ b/XSDDiagrams/Rendering/DiagramItem.cs @@ -468,7 +468,7 @@ namespace XSDDiagram.Rendering return _diagram.ScaleRectangle(rectangle); } - public string GetTextDocumentation() + public string GetTextDocumentation(bool autoWrap = false) { string text = null; XMLSchema.annotated annotated = this.TabSchema as XMLSchema.annotated; diff --git a/XSDDiagrams/Rendering/DiagramSvgRenderer.cs b/XSDDiagrams/Rendering/DiagramSvgRenderer.cs index 93063ba..5c7495e 100644 --- a/XSDDiagrams/Rendering/DiagramSvgRenderer.cs +++ b/XSDDiagrams/Rendering/DiagramSvgRenderer.cs @@ -114,16 +114,17 @@ namespace XSDDiagram.Rendering Rectangle scaledElementBox = drawingItem.ScaleRectangle(drawingItem.ElementBox); // Draw the children lines - if (drawingItem.ShowChildElements) + if (drawingItem.ShowChildElements && drawingItem.ChildElements.Count > 0) { - if (drawingItem.ChildElements.Count == 1) + bool showDocumentation = (drawingItem.Diagram.ShowDocumentation && drawingItem.DocumentationBox != null); + if (drawingItem.ChildElements.Count == 1 && !showDocumentation) { int parentMidleY = drawingItem.ScaleInt(drawingItem.Location.Y + drawingItem.Size.Height / 2); this.SVGLine(foregroundRoundPen, drawingItem.ScaleInt(drawingItem.Location.X + drawingItem.Size.Width), parentMidleY, drawingItem.ScaleInt(drawingItem.ChildElements[0].Location.X), parentMidleY); } - else if (drawingItem.ChildElements.Count > 1) + else if (drawingItem.ChildElements.Count > 1 || showDocumentation) { DiagramItem firstElement = drawingItem.ChildElements[0]; DiagramItem lastElement = drawingItem.ChildElements[drawingItem.ChildElements.Count - 1]; @@ -461,6 +462,22 @@ namespace XSDDiagram.Rendering new Rectangle(scaledElementBox.X, scaledElementBox.Y, scaledElementBox.Width, scaledElementBox.Height)); } + // Draw Documentation + if (drawingItem.Diagram.ShowDocumentation && drawingItem.DocumentationBox != null) + { + string text = drawingItem.GetTextDocumentation(); + if (text != null) + { + //stringFormatText.Trimming = StringTrimming.EllipsisCharacter; + Rectangle scaledDocumentationBox = drawingItem.ScaleRectangle(drawingItem.DocumentationBox); + string style = String.Format( + "font-family:{0};font-size:{1}pt;fill:{2};font-weight:bold;text-anchor:start;dominant-baseline:central;inline-size={3}", + drawingItem.DocumentationFont.Name, drawingItem.DocumentationFont.Size * fontScale, foregroundColor, scaledDocumentationBox.Width); + SVGText(text, style, + new Rectangle(scaledDocumentationBox.X, scaledDocumentationBox.Y, scaledDocumentationBox.Width, scaledDocumentationBox.Height)); + } + } + // Draw occurences small text if (drawingItem.MaxOccurrence > 1 || drawingItem.MaxOccurrence == -1) {