Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit 19fe618

Browse files
author
tbulle
committed
Changes to control extensions for adorner handling
1 parent f4f0f39 commit 19fe618

8 files changed

Lines changed: 58 additions & 22 deletions

File tree

src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/ResizeThumb.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static readonly DependencyProperty IsPrimarySelectionProperty
3030
public static readonly DependencyProperty ResizeThumbVisibleProperty
3131
= DependencyProperty.Register("ResizeThumbVisible", typeof(bool), typeof(ResizeThumb), new FrameworkPropertyMetadata(true));
3232

33-
internal PlacementAlignment Alignment;
33+
public PlacementAlignment Alignment;
3434

3535
static ResizeThumb()
3636
{

src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/SizeDisplay.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
1414
/// <summary>
1515
/// Display height of the element.
1616
/// </summary>
17-
class HeightDisplay : Control
17+
public class HeightDisplay : Control
1818
{
1919
static HeightDisplay()
2020
{
@@ -25,7 +25,7 @@ static HeightDisplay()
2525
/// <summary>
2626
/// Display width of the element.
2727
/// </summary>
28-
class WidthDisplay : Control
28+
public class WidthDisplay : Control
2929
{
3030
static WidthDisplay()
3131
{

src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/ExtensionMethods.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,19 @@ namespace ICSharpCode.WpfDesign.Designer
1616
{
1717
public static class ExtensionMethods
1818
{
19+
20+
public static bool AnyIsInNamespace(this Type type, string namespacestr)
21+
{
22+
Type t = type;
23+
while (t!=null)
24+
{
25+
if (t.Namespace.Equals(namespacestr))
26+
return true;
27+
t = t.BaseType;
28+
}
29+
return false;
30+
}
31+
1932
public static double Coerce(this double value, double min, double max)
2033
{
2134
return Math.Max(Math.Min(value, max), min);

src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/QuickOperationMenuExtension.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
1717
/// Extends the Quick operation menu for the designer.
1818
/// </summary>
1919
[ExtensionFor(typeof (FrameworkElement))]
20-
class QuickOperationMenuExtension : PrimarySelectionAdornerProvider
20+
public class QuickOperationMenuExtension : PrimarySelectionAdornerProvider
2121
{
2222
private QuickOperationMenu _menu;
2323
private KeyBinding _keyBinding;

src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SizeDisplayExtension.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
1818
/// Display Height/Width on the primary selection
1919
/// </summary>
2020
[ExtensionFor(typeof(UIElement))]
21-
class SizeDisplayExtension : PrimarySelectionAdornerProvider
21+
public class SizeDisplayExtension : PrimarySelectionAdornerProvider
2222
{
2323
HeightDisplay _heightDisplay;
2424
WidthDisplay _widthDisplay;

src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System;
66
using System.Diagnostics;
77
using System.Windows.Input;
8+
using System.Windows.Controls;
89
using ICSharpCode.WpfDesign.Adorners;
910
using ICSharpCode.WpfDesign.Designer.Controls;
1011

@@ -161,7 +162,12 @@ internal static bool AddItemWithDefaultSize(DesignItem container, DesignItem cre
161162

162163
internal static bool AddItemWithCustomSize(DesignItem container, DesignItem createdItem, Point position, Size size)
163164
{
164-
165+
bool b = createdItem.View.GetType().AnyIsInNamespace("System.Windows.Shapes");
166+
if (b)
167+
{
168+
createdItem.View.SetValue(Canvas.LeftProperty, position.X);
169+
createdItem.View.SetValue(Canvas.TopProperty, position.Y);
170+
}
165171
PlacementOperation operation = PlacementOperation.TryStartInsertNewComponents(
166172
container,
167173
new DesignItem[] { createdItem },

src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Extensions/ExtensionForAttribute.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
33

44
using System;
5+
using System.Collections.Generic;
56

67
namespace ICSharpCode.WpfDesign.Extensions
78
{
@@ -13,6 +14,7 @@ public sealed class ExtensionForAttribute : Attribute
1314
{
1415
Type _designedItemType;
1516
Type _overrideExtension;
17+
List<Type> _overrideExtensions = new List<Type>();
1618

1719
/// <summary>
1820
/// Gets the type of the item that is designed using this extension.
@@ -21,6 +23,18 @@ public Type DesignedItemType {
2123
get { return _designedItemType; }
2224
}
2325

26+
/// <summary>
27+
/// Gets/Sets the types of another extension that this extension is overriding.
28+
/// </summary>
29+
public Type[] OverrideExtensions
30+
{
31+
get { return _overrideExtensions.ToArray(); }
32+
set
33+
{
34+
_overrideExtensions.AddRange(value);
35+
}
36+
}
37+
2438
/// <summary>
2539
/// Gets/Sets the type of another extension that this extension is overriding.
2640
/// </summary>
@@ -32,6 +46,8 @@ public Type OverrideExtension {
3246
if (!typeof(Extension).IsAssignableFrom(value)) {
3347
throw new ArgumentException("OverrideExtension must specify the type of an Extension.");
3448
}
49+
if(!_overrideExtensions.Contains(value))
50+
_overrideExtensions.Add(value);
3551
}
3652
}
3753
}

src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Extensions/ExtensionManager.cs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,19 @@ sealed class ExtensionEntry
4949
{
5050
internal readonly Type ExtensionType;
5151
internal readonly ExtensionServer Server;
52-
internal readonly Type OverriddenExtensionType;
52+
internal readonly List<Type> OverriddenExtensionTypes = new List<Type>();
5353

5454
public ExtensionEntry(Type extensionType, ExtensionServer server, Type overriddenExtensionType)
5555
{
5656
this.ExtensionType = extensionType;
5757
this.Server = server;
58-
this.OverriddenExtensionType = overriddenExtensionType;
58+
this.OverriddenExtensionTypes.Add(overriddenExtensionType);
59+
}
60+
public ExtensionEntry(Type extensionType, ExtensionServer server, List<Type> overriddenExtensionTypes)
61+
{
62+
this.ExtensionType = extensionType;
63+
this.Server = server;
64+
this.OverriddenExtensionTypes= overriddenExtensionTypes;
5965
}
6066
}
6167

@@ -72,23 +78,18 @@ void AddExtensionEntry(Type extendedItemType, ExtensionEntry entry)
7278

7379
List<ExtensionEntry> GetExtensionEntries(Type extendedItemType)
7480
{
75-
List<ExtensionEntry> result;
76-
if (extendedItemType.BaseType != null)
77-
result = GetExtensionEntries(extendedItemType.BaseType);
78-
else
79-
result = new List<ExtensionEntry>();
80-
81-
List<ExtensionEntry> list;
82-
if (_extensions.TryGetValue(extendedItemType, out list)) {
83-
foreach (ExtensionEntry entry in list) {
84-
if (entry.OverriddenExtensionType != null) {
85-
result.RemoveAll(delegate(ExtensionEntry oldEntry) {
86-
return oldEntry.ExtensionType == entry.OverriddenExtensionType;
87-
});
88-
}
81+
List<ExtensionEntry> result = new List<ExtensionEntry>();
82+
List<Type> overriddenExtensions = new List<Type>();
83+
IEnumerable<ExtensionEntry> ie = _extensions.Where(x => x.Key.IsAssignableFrom(extendedItemType)).SelectMany(x => x.Value);
84+
foreach (ExtensionEntry entry in ie) {
85+
if (!overriddenExtensions.Contains(entry.ExtensionType)) {
86+
overriddenExtensions.AddRange(entry.OverriddenExtensionTypes);
87+
88+
result.RemoveAll(x => overriddenExtensions.Contains(x.ExtensionType));
8989
result.Add(entry);
9090
}
9191
}
92+
9293
return result;
9394
}
9495

0 commit comments

Comments
 (0)