Browse Source

Better compatibility with VS2005 format. Made the Enum and the Delegate blocks look more like in VS2005. Minor bug fixes.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2377 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Itar Bar-Haim 19 years ago
parent
commit
adf25cb21a
  1. 1
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/ClassCanvas.csproj
  2. 3
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Interactivity/IInteractiveDrawable.cs
  3. 2
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Interactivity/IMouseInteractable.cs
  4. 24
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Interactivity/InteractiveHeaderedItem.cs
  5. 53
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Interactivity/InteractiveItemsStack.cs
  6. 16
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/CanvasItem.cs
  7. 9
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/ClassCanvas.cs
  8. 137
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/ClassCanvasItem.cs
  9. 73
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/DelegateCanvasItem.cs
  10. 15
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/EnumCanvasItem.cs
  11. 4
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/NoteCanvasItem.cs
  12. 12
      src/AddIns/DisplayBindings/ClassDiagram/DiagramRouter/BaseRectangle.cs
  13. 2
      src/AddIns/DisplayBindings/ClassDiagram/DiagramRouter/Drawables/DrawableItemsStack.cs
  14. 9
      src/AddIns/DisplayBindings/ClassDiagram/DiagramRouter/Drawables/HeaderedItem.cs
  15. 15
      src/AddIns/DisplayBindings/ClassDiagram/DiagramRouter/ItemsStack.cs

1
src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/ClassCanvas.csproj

@ -46,6 +46,7 @@
<Compile Include="Interactivity\IInteractiveDrawable.cs" /> <Compile Include="Interactivity\IInteractiveDrawable.cs" />
<Compile Include="Interactivity\IMouseInteractable.cs" /> <Compile Include="Interactivity\IMouseInteractable.cs" />
<Compile Include="Interactivity\InteractiveHeaderedItem.cs" /> <Compile Include="Interactivity\InteractiveHeaderedItem.cs" />
<Compile Include="Interactivity\InteractiveItemsStack.cs" />
<Compile Include="Src\CanvasItem.cs" /> <Compile Include="Src\CanvasItem.cs" />
<Compile Include="Src\ClassCanvas.cs" /> <Compile Include="Src\ClassCanvas.cs" />
<Compile Include="Src\ClassCanvas.Designer.cs"> <Compile Include="Src\ClassCanvas.Designer.cs">

3
src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Interactivity/IInteractiveDrawable.cs

@ -18,4 +18,7 @@ namespace ClassDiagram
{ {
} }
public interface IInteractiveRectangle : IDrawableRectangle, IHitTestable, IMouseInteractable
{
}
} }

2
src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Interactivity/IMouseInteractable.cs

@ -80,4 +80,6 @@ namespace ClassDiagram
/// </summary> /// </summary>
void HandleMouseLeave (); void HandleMouseLeave ();
} }
public delegate void PositionDelegate (object sender, PointF pos);
} }

24
src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Interactivity/InteractiveHeaderedItem.cs

@ -25,16 +25,16 @@ namespace ClassDiagram
IDrawableRectangle content) IDrawableRectangle content)
: base (headerCollapsed, headerExpanded, content) {} : base (headerCollapsed, headerExpanded, content) {}
public event EventHandler HeaderClicked = delegate {}; public event PositionDelegate HeaderClicked = delegate {};
public event EventHandler ContentClicked = delegate {}; public event PositionDelegate ContentClicked = delegate {};
public event EventHandler HeaderMouseDown = delegate {}; public event PositionDelegate HeaderMouseDown = delegate {};
public event EventHandler ContentMouseDown = delegate {}; public event PositionDelegate ContentMouseDown = delegate {};
public event EventHandler HeaderMouseMove = delegate {}; public event PositionDelegate HeaderMouseMove = delegate {};
public event EventHandler ContentMouseMove = delegate {}; public event PositionDelegate ContentMouseMove = delegate {};
public event EventHandler HeaderMouseUp = delegate {}; public event PositionDelegate HeaderMouseUp = delegate {};
public event EventHandler ContentMouseUp = delegate {}; public event PositionDelegate ContentMouseUp = delegate {};
private void HandleMouseEvent(PointF pos, EventHandler headerEvent, EventHandler contentEvent) private void HandleMouseEvent(PointF pos, PositionDelegate headerEvent, PositionDelegate contentEvent)
{ {
if (Collapsed) if (Collapsed)
{ {
@ -43,7 +43,7 @@ namespace ClassDiagram
pos.Y >= HeaderCollapsed.AbsoluteY && pos.Y >= HeaderCollapsed.AbsoluteY &&
pos.Y <= HeaderCollapsed.AbsoluteY + HeaderCollapsed.ActualHeight) pos.Y <= HeaderCollapsed.AbsoluteY + HeaderCollapsed.ActualHeight)
{ {
headerEvent(this, EventArgs.Empty); headerEvent(this, pos);
} }
} }
else else
@ -53,14 +53,14 @@ namespace ClassDiagram
pos.Y >= HeaderExpanded.AbsoluteY && pos.Y >= HeaderExpanded.AbsoluteY &&
pos.Y <= HeaderExpanded.AbsoluteY + HeaderExpanded.ActualHeight) pos.Y <= HeaderExpanded.AbsoluteY + HeaderExpanded.ActualHeight)
{ {
headerEvent(this, EventArgs.Empty); headerEvent(this, pos);
} }
else if (pos.X >= Content.AbsoluteX && else if (pos.X >= Content.AbsoluteX &&
pos.X <= Content.AbsoluteX + Content.ActualWidth && pos.X <= Content.AbsoluteX + Content.ActualWidth &&
pos.Y >= Content.AbsoluteY && pos.Y >= Content.AbsoluteY &&
pos.Y <= Content.AbsoluteY + Content.ActualHeight) pos.Y <= Content.AbsoluteY + Content.ActualHeight)
{ {
contentEvent(this, EventArgs.Empty); contentEvent(this, pos);
} }
} }
} }

53
src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Interactivity/InteractiveItemsStack.cs

@ -0,0 +1,53 @@
/*
* Created by SharpDevelop.
* User: itai
* Date: 28/09/2006
* Time: 19:03
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using Tools.Diagrams;
using Tools.Diagrams.Drawables;
namespace ClassDiagram
{
public class InteractiveItemsStack : DrawableItemsStack<IDrawableRectangle>, IMouseInteractable
{
public void HandleMouseClick(PointF pos)
{
foreach (IMouseInteractable mi in this)
mi.HandleMouseClick(pos);
}
public void HandleMouseDown(PointF pos)
{
foreach (IMouseInteractable mi in this)
mi.HandleMouseDown(pos);
}
public void HandleMouseMove(PointF pos)
{
foreach (IMouseInteractable mi in this)
mi.HandleMouseMove(pos);
}
public void HandleMouseUp(PointF pos)
{
foreach (IMouseInteractable mi in this)
mi.HandleMouseUp(pos);
}
public void HandleMouseLeave()
{
foreach (IMouseInteractable mi in this)
mi.HandleMouseLeave();
}
}
}

16
src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/CanvasItem.cs

@ -66,7 +66,7 @@ namespace ClassDiagram
} }
} }
public abstract class CanvasItem : BaseRectangle, IInteractiveDrawable, IDrawableRectangle public abstract class CanvasItem : BaseRectangle, IInteractiveDrawable, IDrawableRectangle, IInteractiveRectangle
{ {
#region Constructors #region Constructors
@ -428,15 +428,15 @@ namespace ClassDiagram
protected virtual void FillXmlPositionElement (XmlElement position, XmlDocument document) protected virtual void FillXmlPositionElement (XmlElement position, XmlDocument document)
{ {
position.SetAttribute("X", X.ToString(CultureInfo.InvariantCulture)); position.SetAttribute("X", (X/100).ToString(CultureInfo.InvariantCulture));
position.SetAttribute("Y", Y.ToString(CultureInfo.InvariantCulture)); position.SetAttribute("Y", (Y/100).ToString(CultureInfo.InvariantCulture));
position.SetAttribute("Width", Width.ToString(CultureInfo.InvariantCulture)); position.SetAttribute("Width", (Width/100).ToString(CultureInfo.InvariantCulture));
} }
public virtual void WriteToXml(XmlDocument document) public virtual void WriteToXml(XmlDocument document)
{ {
XmlElement elem = CreateXmlElement(document); XmlElement elem = CreateXmlElement(document);
FillXmlElement (elem, document); FillXmlElement(elem, document);
document.DocumentElement.AppendChild(elem); document.DocumentElement.AppendChild(elem);
} }
@ -449,9 +449,9 @@ namespace ClassDiagram
protected virtual void ReadXmlPositionElement (XPathNavigator navigator) protected virtual void ReadXmlPositionElement (XPathNavigator navigator)
{ {
X = float.Parse(navigator.GetAttribute("X", ""), CultureInfo.InvariantCulture); X = 100 * float.Parse(navigator.GetAttribute("X", ""), CultureInfo.InvariantCulture);
Y = float.Parse(navigator.GetAttribute("Y", ""), CultureInfo.InvariantCulture); Y = 100 * float.Parse(navigator.GetAttribute("Y", ""), CultureInfo.InvariantCulture);
Width = float.Parse(navigator.GetAttribute("Width", ""), CultureInfo.InvariantCulture); Width = 100 * float.Parse(navigator.GetAttribute("Width", ""), CultureInfo.InvariantCulture);
} }
#endregion #endregion

9
src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/ClassCanvas.cs

@ -170,7 +170,7 @@ namespace ClassDiagram
w = Math.Max(w, item.Item.X + item.Item.ActualWidth + item.Item.Border); w = Math.Max(w, item.Item.X + item.Item.ActualWidth + item.Item.Border);
h = Math.Max(h, item.Item.Y + item.Item.ActualHeight + item.Item.Border); h = Math.Max(h, item.Item.Y + item.Item.ActualHeight + item.Item.Border);
} }
return new SizeF(w + 40, h + 40); return new SizeF(w + 50, h + 50);
} }
public Size GetDiagramPixelSize () public Size GetDiagramPixelSize ()
@ -183,7 +183,8 @@ namespace ClassDiagram
public void SetRecommendedGraphicsAttributes (Graphics graphics) public void SetRecommendedGraphicsAttributes (Graphics graphics)
{ {
graphics.CompositingQuality = CompositingQuality.HighSpeed; graphics.CompositingQuality = CompositingQuality.HighSpeed;
graphics.SmoothingMode = SmoothingMode.AntiAlias; //graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.PageUnit = GraphicsUnit.Pixel; graphics.PageUnit = GraphicsUnit.Pixel;
graphics.PixelOffsetMode = PixelOffsetMode.Half; graphics.PixelOffsetMode = PixelOffsetMode.Half;
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
@ -395,8 +396,8 @@ namespace ClassDiagram
{ {
PointF pos = new PointF(args.Value.X, args.Value.Y); PointF pos = new PointF(args.Value.X, args.Value.Y);
pos.X = Math.Max ((float) Math.Round(pos.X / 10.0f) * 10.0f, 40.0f); pos.X = Math.Max ((float) Math.Round(pos.X / 10.0f) * 10.0f, 50.0f);
pos.Y = Math.Max ((float) Math.Round(pos.Y / 10.0f) * 10.0f, 40.0f); pos.Y = Math.Max ((float) Math.Round(pos.Y / 10.0f) * 10.0f, 50.0f);
args.Cancel = (pos.X == args.Value.X) && (pos.Y == args.Value.Y); args.Cancel = (pos.X == args.Value.X) && (pos.Y == args.Value.Y);
args.Value = pos; args.Value = pos;

137
src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/ClassCanvasItem.cs

@ -65,8 +65,6 @@ namespace ClassDiagram
DrawableRectangle titlesBackgroundCollapsed; DrawableRectangle titlesBackgroundCollapsed;
DrawableRectangle titlesBackgroundExpanded; DrawableRectangle titlesBackgroundExpanded;
const int radius = 20;
protected override bool AllowHeightModifications() protected override bool AllowHeightModifications()
{ {
return false; return false;
@ -101,26 +99,30 @@ namespace ClassDiagram
public ClassCanvasItem (IClass ct) public ClassCanvasItem (IClass ct)
{ {
classtype = ct; classtype = ct;
grad = new LinearGradientBrush(
new PointF(0, 0), new PointF(1, 0),
TitleBackground, Color.White);
classItemHeaderedContent = new InteractiveHeaderedItem(titlesCollapsed, titlesExpanded, InitContentContainer(InitContent())); classItemHeaderedContent = new InteractiveHeaderedItem(titlesCollapsed, titlesExpanded, InitContentContainer(InitContent()));
classItemContainer.Container = this; classItemContainer.Container = this;
classItemContainer.Add(classItemHeaderedContent); classItemContainer.Add(classItemHeaderedContent);
Pen outlinePen = GetClassOutlinePen(); Pen outlinePen = GetClassOutlinePen();
if (RoundedCorners) if (RoundedCorners)
{
int radius = CornerRadius;
containingShape = new DrawableRectangle(null, outlinePen, radius, radius, radius, radius); containingShape = new DrawableRectangle(null, outlinePen, radius, radius, radius, radius);
}
else else
containingShape = new DrawableRectangle(null, outlinePen, 0, 0, 0, 0); containingShape = new DrawableRectangle(null, outlinePen, 0, 0, 0, 0);
classItemContainer.Add(containingShape); classItemContainer.Add(containingShape);
classItemContainer.OrientationAxis = Axis.Z; classItemContainer.OrientationAxis = Axis.Z;
grad = new LinearGradientBrush(
new PointF(0, 0), new PointF(1, 0),
TitleBackground, Color.White);
if (RoundedCorners) if (RoundedCorners)
{ {
int radius = CornerRadius;
titlesBackgroundCollapsed = new DrawableRectangle(grad, null, radius, radius, radius, radius); titlesBackgroundCollapsed = new DrawableRectangle(grad, null, radius, radius, radius, radius);
titlesBackgroundExpanded = new DrawableRectangle(grad, null, radius, radius, 0, 0); titlesBackgroundExpanded = new DrawableRectangle(grad, null, radius, radius, 0, 0);
} }
@ -177,11 +179,24 @@ namespace ClassDiagram
get { return false; } get { return false; }
} }
protected virtual DrawableRectangle InitContentBackground()
{
if (RoundedCorners)
{
int radius = CornerRadius;
return new DrawableRectangle(ContentBG, null, 0, 0, radius, radius);
}
else
return new DrawableRectangle(ContentBG, null, 0, 0, 0, 0);
}
protected virtual DrawableItemsStack InitContentContainer(params IDrawableRectangle[] items) protected virtual DrawableItemsStack InitContentContainer(params IDrawableRectangle[] items)
{ {
DrawableItemsStack content = new DrawableItemsStack(); DrawableItemsStack content = new DrawableItemsStack();
content.OrientationAxis = Axis.Z; content.OrientationAxis = Axis.Z;
content.Add(new DrawableRectangle(Brushes.White, null, 1, 1, radius, radius));
content.Add(InitContentBackground());
foreach (IDrawableRectangle item in items) foreach (IDrawableRectangle item in items)
content.Add(item); content.Add(item);
@ -209,19 +224,35 @@ namespace ClassDiagram
static Color titlesBG = Color.FromArgb(255,217, 225, 241); static Color titlesBG = Color.FromArgb(255,217, 225, 241);
protected virtual Color TitleBackground protected virtual Color TitleBackground
{ {
get { return titlesBG;} get { return titlesBG; }
} }
protected virtual LinearGradientBrush TitleBG
{
get { return grad; }
}
static Brush innerTitlesBG = new SolidBrush(Color.FromArgb(255, 240, 242, 249)); static Brush innerTitlesBG = new SolidBrush(Color.FromArgb(255, 240, 242, 249));
protected virtual Brush InnerTitlesBackground protected virtual Brush InnerTitlesBackground
{ {
get { return innerTitlesBG;} get { return innerTitlesBG; }
} }
static Brush contentBG = new SolidBrush(Color.FromArgb(255, 255, 255, 255));
protected virtual Brush ContentBG
{
get { return contentBG; }
}
protected virtual bool RoundedCorners protected virtual bool RoundedCorners
{ {
get { return true; } get { return true; }
} }
protected virtual int CornerRadius
{
get { return 15; }
}
#endregion #endregion
#region Preparations #region Preparations
@ -380,27 +411,30 @@ namespace ClassDiagram
InteractiveHeaderedItem tg = new InteractiveHeaderedItem(headerCollapsed, headerExpanded, content); InteractiveHeaderedItem tg = new InteractiveHeaderedItem(headerCollapsed, headerExpanded, content);
tg.HeaderClicked += delegate { tg.Collapsed = !tg.Collapsed; }; tg.HeaderClicked += delegate { tg.Collapsed = !tg.Collapsed; };
IMouseInteractable interactive = content as IMouseInteractable;
if (interactive != null)
tg.ContentClicked += delegate (object sender, PointF pos) { interactive.HandleMouseClick(pos); };
tg.RedrawNeeded += HandleRedraw; tg.RedrawNeeded += HandleRedraw;
return tg; return tg;
} }
protected virtual DrawableItemsStack PrepareMembersContent <MT> (ICollection<MT> members) where MT : IMember protected virtual InteractiveItemsStack PrepareMembersContent <MT> (ICollection<MT> members) where MT : IMember
{ {
if (members == null) return null; if (members == null) return null;
if (members.Count == 0) return null; if (members.Count == 0) return null;
DrawableItemsStack content = new DrawableItemsStack(); InteractiveItemsStack content = new InteractiveItemsStack();
content.OrientationAxis = Axis.Y; content.OrientationAxis = Axis.Y;
PrepareMembersContent <MT> (members, content); PrepareMembersContent <MT> (members, content);
return content; return content;
} }
private DrawableItemsStack PerpareNestedTypesContent() private InteractiveItemsStack PerpareNestedTypesContent()
{ {
DrawableItemsStack innerItems = new DrawableItemsStack(); InteractiveItemsStack innerItems = new InteractiveItemsStack();
innerItems.OrientationAxis = Axis.Y; innerItems.OrientationAxis = Axis.Y;
innerItems.Spacing = 10; innerItems.Spacing = 10;
innerItems.Border = 10; innerItems.Padding = 10;
foreach (IClass ct in classtype.InnerClasses) foreach (IClass ct in classtype.InnerClasses)
{ {
ClassCanvasItem innerItem = ClassCanvas.CreateItemFromType(ct); ClassCanvasItem innerItem = ClassCanvas.CreateItemFromType(ct);
@ -409,7 +443,7 @@ namespace ClassDiagram
return innerItems; return innerItems;
} }
protected virtual void PrepareMembersContent <MT> (ICollection<MT> members, DrawableItemsStack content) where MT : IMember protected virtual void PrepareMembersContent <MT> (ICollection<MT> members, InteractiveItemsStack content) where MT : IMember
{ {
if (members == null) return; if (members == null) return;
if (members.Count == 0) return; if (members.Count == 0) return;
@ -433,7 +467,7 @@ namespace ClassDiagram
#endregion #endregion
} }
private void AddGroupToContent(string title, DrawableItemsStack groupContent) private void AddGroupToContent(string title, InteractiveItemsStack groupContent)
{ {
if (groupContent != null) if (groupContent != null)
{ {
@ -450,10 +484,10 @@ namespace ClassDiagram
groups.Clear(); groups.Clear();
DrawableItemsStack propertiesContent = PrepareMembersContent <IProperty> (classtype.Properties); InteractiveItemsStack propertiesContent = PrepareMembersContent <IProperty> (classtype.Properties);
DrawableItemsStack methodsContent = PrepareMembersContent <IMethod> (classtype.Methods); InteractiveItemsStack methodsContent = PrepareMembersContent <IMethod> (classtype.Methods);
DrawableItemsStack fieldsContent = PrepareMembersContent <IField> (classtype.Fields); InteractiveItemsStack fieldsContent = PrepareMembersContent <IField> (classtype.Fields);
DrawableItemsStack eventsContent = PrepareMembersContent <IEvent> (classtype.Events); InteractiveItemsStack eventsContent = PrepareMembersContent <IEvent> (classtype.Events);
AddGroupToContent("Properties", propertiesContent); AddGroupToContent("Properties", propertiesContent);
AddGroupToContent("Methods", methodsContent); AddGroupToContent("Methods", methodsContent);
@ -462,7 +496,7 @@ namespace ClassDiagram
if (classtype.InnerClasses.Count > 0) if (classtype.InnerClasses.Count > 0)
{ {
DrawableItemsStack nestedTypesContent = PerpareNestedTypesContent(); InteractiveItemsStack nestedTypesContent = PerpareNestedTypesContent();
AddGroupToContent("Nested Types", nestedTypesContent); AddGroupToContent("Nested Types", nestedTypesContent);
} }
} }
@ -470,14 +504,17 @@ namespace ClassDiagram
protected virtual void PrepareFrame () protected virtual void PrepareFrame ()
{ {
ActualHeight = classItemContainer.GetAbsoluteContentHeight(); ActualHeight = classItemContainer.GetAbsoluteContentHeight();
if (Container != null) return;
shadowpath = new GraphicsPath(); shadowpath = new GraphicsPath();
if (RoundedCorners) if (RoundedCorners)
{ {
int radius = CornerRadius;
shadowpath.AddArc(ActualWidth-radius + 4, 3, radius, radius, 300, 60); shadowpath.AddArc(ActualWidth-radius + 4, 3, radius, radius, 300, 60);
shadowpath.AddArc(ActualWidth-radius + 4, ActualHeight-radius + 3, radius, radius, 0, 90); shadowpath.AddArc(ActualWidth-radius + 4, ActualHeight - radius + 3, radius, radius, 0, 90);
shadowpath.AddArc(4, ActualHeight-radius + 3, radius, radius, 90, 45); shadowpath.AddArc(4, ActualHeight-radius + 3, radius, radius, 90, 45);
shadowpath.AddArc(ActualWidth-radius, ActualHeight-radius, radius, radius, 90, -90); shadowpath.AddArc(ActualWidth-radius, ActualHeight - radius, radius, radius, 90, -90);
} }
else else
{ {
@ -504,14 +541,16 @@ namespace ClassDiagram
GraphicsState state = graphics.Save(); GraphicsState state = graphics.Save();
graphics.TranslateTransform (AbsoluteX, AbsoluteY); graphics.TranslateTransform (AbsoluteX, AbsoluteY);
//Draw Shadow if (Container == null)
graphics.FillPath(CanvasItem.ShadowBrush, shadowpath); {
//Draw Shadow
graphics.FillPath(CanvasItem.ShadowBrush, shadowpath);
}
classItemContainer.Width = Width; classItemContainer.Width = Width;
classItemContainer.Height = Height; classItemContainer.Height = Height;
graphics.Restore(state); graphics.Restore(state);
classItemContainer.DrawToGraphics(graphics); classItemContainer.DrawToGraphics(graphics);
//Draw interfaces lollipops //Draw interfaces lollipops
@ -620,7 +659,8 @@ namespace ClassDiagram
public void Dispose() public void Dispose()
{ {
grad.Dispose(); grad.Dispose();
shadowpath.Dispose(); if (shadowpath != null)
shadowpath.Dispose();
} }
public override string ToString() public override string ToString()
@ -628,39 +668,4 @@ namespace ClassDiagram
return "ClasCanvasItem: " + classtype.Name; return "ClasCanvasItem: " + classtype.Name;
} }
} }
/// <summary>
/// Test interface
/// </summary>
public interface TestInterface
{
}
/// <summary>
/// Test class.
/// </summary>
public class TestClass_Long_Title : TestInterface
{
/// <summary>
/// A method with a common test name and one parameter.
/// </summary>
public void foo(string str) {}
/// <summary>
/// Some test field.
/// </summary>
public int bar;
/// <summary>
/// The getter for the 'bar' field.
/// </summary>
public int Bar { get { return bar; } }
/// <summary>
/// A simple test event.
/// </summary>
public event EventHandler stupid = delegate {};
}
} }

73
src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/DelegateCanvasItem.cs

@ -27,15 +27,61 @@ using Tools.Diagrams.Drawables;
namespace ClassDiagram namespace ClassDiagram
{ {
// TODO - should look at the Invoke method and extract the parameters and return type. // TODO - perhaps abandon this base class and implement styles mechanism instead?
// this is the only information that need to be shown. The parameters should public class EnumDelegateCanvasItem : ClassCanvasItem
// be listed in the form of paramName : paramType, as for the return type, still
// need to figure that out ;)
public class DelegateCanvasItem : ClassCanvasItem
{ {
public DelegateCanvasItem (IClass ct) : base (ct) {} public EnumDelegateCanvasItem (IClass ct) : base (ct) {}
private InteractiveItemsStack items = new InteractiveItemsStack();
private DrawableItemsStack parameters = new DrawableItemsStack(); public InteractiveItemsStack Items {
get { return items; }
}
protected override DrawableRectangle InitContentBackground()
{
if (RoundedCorners)
{
int radius = CornerRadius;
return new DrawableRectangle(ContentBG, null, 0, 0, radius, 0);
}
else
return new DrawableRectangle(ContentBG, null, 0, 0, 0, 0);
}
protected override DrawableItemsStack InitContentContainer(params IDrawableRectangle[] items)
{
DrawableItemsStack decorator = new DrawableItemsStack();
decorator.OrientationAxis = Axis.X;
DrawableRectangle rect;
if (RoundedCorners)
{
int radius = CornerRadius;
rect = new DrawableRectangle(TitleBG, null, 0, 0, 0, radius);
}
else
{
rect = new DrawableRectangle(TitleBG, null, 0, 0, 0, 0);
}
rect.Width = 20;
decorator.Add(rect);
decorator.Add(base.InitContentContainer(items));
return decorator;
}
protected override IDrawableRectangle InitContent()
{
items.Border = 5;
items.OrientationAxis = Axis.Y;
return items;
}
}
public class DelegateCanvasItem : EnumDelegateCanvasItem
{
public DelegateCanvasItem (IClass ct) : base (ct) {}
static Color titlesBG = Color.FromArgb(255, 237, 219, 221); static Color titlesBG = Color.FromArgb(255, 237, 219, 221);
protected override Color TitleBackground protected override Color TitleBackground
@ -43,22 +89,21 @@ namespace ClassDiagram
get { return titlesBG; } get { return titlesBG; }
} }
protected override IDrawableRectangle InitContent() static Brush contentBG = new SolidBrush(Color.FromArgb(255, 247, 240, 240));
protected override Brush ContentBG
{ {
parameters.Border = 5; get { return contentBG; }
parameters.OrientationAxis = Axis.Y;
return parameters;
} }
protected override void PrepareMembersContent() protected override void PrepareMembersContent()
{ {
parameters.Clear(); Items.Clear();
IMethod invokeMethod = RepresentedClassType.SearchMember("Invoke", RepresentedClassType.ProjectContent.Language) as IMethod; IMethod invokeMethod = RepresentedClassType.SearchMember("Invoke", RepresentedClassType.ProjectContent.Language) as IMethod;
IAmbience ambience = GetAmbience(); IAmbience ambience = GetAmbience();
foreach (IParameter par in invokeMethod.Parameters) foreach (IParameter par in invokeMethod.Parameters)
{ {
TextSegment ts = new TextSegment(Graphics, par.Name + " : " + ambience.Convert(par.ReturnType), MemberFont, true); TextSegment ts = new TextSegment(Graphics, par.Name + " : " + ambience.Convert(par.ReturnType), MemberFont, true);
parameters.Add(ts); Items.Add(ts);
} }
} }

15
src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/EnumCanvasItem.cs

@ -24,11 +24,11 @@ using Tools.Diagrams.Drawables;
namespace ClassDiagram namespace ClassDiagram
{ {
public class EnumCanvasItem : ClassCanvasItem public class EnumCanvasItem : EnumDelegateCanvasItem
{ {
public EnumCanvasItem (IClass ct) : base (ct) {} public EnumCanvasItem (IClass ct) : base (ct) {}
private DrawableItemsStack fields = new DrawableItemsStack(); private InteractiveItemsStack fields = new InteractiveItemsStack();
static Color titlesBG = Color.FromArgb(255, 221, 214, 239); static Color titlesBG = Color.FromArgb(255, 221, 214, 239);
protected override Color TitleBackground protected override Color TitleBackground
@ -41,17 +41,10 @@ namespace ClassDiagram
get { return false; } get { return false; }
} }
protected override IDrawableRectangle InitContent()
{
fields.Border = 5;
fields.OrientationAxis = Axis.Y;
return fields;
}
protected override void PrepareMembersContent () protected override void PrepareMembersContent ()
{ {
fields.Clear(); Items.Clear();
PrepareMembersContent <IField> (RepresentedClassType.Fields, fields); PrepareMembersContent <IField> (RepresentedClassType.Fields, Items);
} }
protected override XmlElement CreateXmlElement(XmlDocument doc) protected override XmlElement CreateXmlElement(XmlDocument doc)

4
src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/NoteCanvasItem.cs

@ -104,7 +104,7 @@ namespace ClassDiagram
protected override void FillXmlPositionElement(XmlElement position, XmlDocument document) protected override void FillXmlPositionElement(XmlElement position, XmlDocument document)
{ {
base.FillXmlPositionElement(position, document); base.FillXmlPositionElement(position, document);
position.SetAttribute("Height", Height.ToString(CultureInfo.InvariantCulture)); position.SetAttribute("Height", (Height/100).ToString(CultureInfo.InvariantCulture));
} }
public override void LoadFromXml (XPathNavigator navigator) public override void LoadFromXml (XPathNavigator navigator)
@ -116,7 +116,7 @@ namespace ClassDiagram
protected override void ReadXmlPositionElement(XPathNavigator navigator) protected override void ReadXmlPositionElement(XPathNavigator navigator)
{ {
base.ReadXmlPositionElement(navigator); base.ReadXmlPositionElement(navigator);
Height = float.Parse(navigator.GetAttribute("Height", ""), CultureInfo.InvariantCulture); Height = 100 * float.Parse(navigator.GetAttribute("Height", ""), CultureInfo.InvariantCulture);
} }
#endregion #endregion

12
src/AddIns/DisplayBindings/ClassDiagram/DiagramRouter/BaseRectangle.cs

@ -21,6 +21,8 @@ namespace Tools.Diagrams
private IRectangle container; private IRectangle container;
public string Name;
public IRectangle Container public IRectangle Container
{ {
get { return container; } get { return container; }
@ -95,10 +97,6 @@ namespace Tools.Diagrams
set set
{ {
w = value; w = value;
if (float.IsNaN(w))
{
}
OnSizeChanged(); OnSizeChanged();
OnWidthChanged(); OnWidthChanged();
} }
@ -186,5 +184,11 @@ namespace Tools.Diagrams
public event EventHandler HeightChanged = delegate {}; public event EventHandler HeightChanged = delegate {};
public event EventHandler ActualWidthChanged = delegate {}; public event EventHandler ActualWidthChanged = delegate {};
public event EventHandler ActualHeightChanged = delegate {}; public event EventHandler ActualHeightChanged = delegate {};
public override string ToString()
{
return Name + " (" + this.GetType().ToString() + ")";
}
} }
} }

2
src/AddIns/DisplayBindings/ClassDiagram/DiagramRouter/Drawables/DrawableItemsStack.cs

@ -24,7 +24,7 @@ namespace Tools.Diagrams.Drawables
public class DrawableItemsStack<T> public class DrawableItemsStack<T>
: ItemsStack<T>, IDrawableRectangle : ItemsStack<T>, IDrawableRectangle
where T : IDrawableRectangle where T : IDrawable, IRectangle
{ {
public void DrawToGraphics(Graphics graphics) public void DrawToGraphics(Graphics graphics)
{ {

9
src/AddIns/DisplayBindings/ClassDiagram/DiagramRouter/Drawables/HeaderedItem.cs

@ -47,17 +47,17 @@ namespace Tools.Diagrams.Drawables
headerExpanded.HeightChanged += delegate { content.Y = headerExpanded.GetAbsoluteContentHeight(); }; headerExpanded.HeightChanged += delegate { content.Y = headerExpanded.GetAbsoluteContentHeight(); };
} }
protected IDrawableRectangle HeaderCollapsed public IDrawableRectangle HeaderCollapsed
{ {
get { return headerCollapsed; } get { return headerCollapsed; }
} }
protected IDrawableRectangle HeaderExpanded public IDrawableRectangle HeaderExpanded
{ {
get { return headerExpanded; } get { return headerExpanded; }
} }
protected IDrawableRectangle Content public IDrawableRectangle Content
{ {
get { return content; } get { return content; }
} }
@ -141,7 +141,7 @@ namespace Tools.Diagrams.Drawables
if (!collapsed) if (!collapsed)
{ {
width = Math.Max(width, headerExpanded.GetAbsoluteContentWidth()); width = Math.Max(width, headerExpanded.GetAbsoluteContentWidth());
width = Math.Max(width, content.GetAbsoluteContentWidth()); width = Math.Max(width, content.GetAbsoluteContentWidth() + content.Padding * 2);
} }
else else
width = headerCollapsed.GetAbsoluteContentWidth(); width = headerCollapsed.GetAbsoluteContentWidth();
@ -156,6 +156,7 @@ namespace Tools.Diagrams.Drawables
{ {
height = headerExpanded.GetAbsoluteContentHeight(); height = headerExpanded.GetAbsoluteContentHeight();
height += content.GetAbsoluteContentHeight(); height += content.GetAbsoluteContentHeight();
height += content.Padding * 2;
} }
else else
{ {

15
src/AddIns/DisplayBindings/ClassDiagram/DiagramRouter/ItemsStack.cs

@ -138,6 +138,8 @@ namespace Tools.Diagrams
if (!IsItemWidthValid(r)) if (!IsItemWidthValid(r))
r.ActualWidth = Math.Max(spacePerUndefined - r.Border * 2, 0); r.ActualWidth = Math.Max(spacePerUndefined - r.Border * 2, 0);
else if (float.IsNaN(r.ActualWidth) || r.ActualWidth < 0)
r.ActualWidth = r.Width;
w += r.ActualWidth + spacing + r.Border * 2; w += r.ActualWidth + spacing + r.Border * 2;
x = w; x = w;
@ -225,7 +227,9 @@ namespace Tools.Diagrams
if (!IsItemHeightValid(r)) if (!IsItemHeightValid(r))
r.ActualHeight = Math.Max (spacePerUndefined - r.Border * 2, 0); r.ActualHeight = Math.Max (spacePerUndefined - r.Border * 2, 0);
else if (float.IsNaN(r.ActualHeight) || r.ActualHeight < 0)
r.ActualHeight = r.Height;
h += r.ActualHeight + spacing + r.Border * 2; h += r.ActualHeight + spacing + r.Border * 2;
y = h; y = h;
} }
@ -245,10 +249,11 @@ namespace Tools.Diagrams
foreach (IRectangle r in items) foreach (IRectangle r in items)
{ {
r.X = r.Border + Padding; float bp = r.Border + Padding;
r.Y = r.Border + Padding; r.X = bp;
r.ActualWidth = w - (r.Border + Padding) * 2; r.Y = bp;
r.ActualHeight = h - (r.Border + Padding) * 2; r.ActualWidth = w - bp * 2;
r.ActualHeight = h - bp * 2;
} }
dontHandleResize = true; dontHandleResize = true;

Loading…
Cancel
Save