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

Commit 5e2c630

Browse files
author
gumme
committed
Merge remote-tracking branch 'remotes/origin/WpfDesignerControlExtensions'
2 parents 369cec8 + 19fe618 commit 5e2c630

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
@@ -45,7 +45,7 @@ public static readonly DependencyProperty IsPrimarySelectionProperty
4545
public static readonly DependencyProperty ResizeThumbVisibleProperty
4646
= DependencyProperty.Register("ResizeThumbVisible", typeof(bool), typeof(ResizeThumb), new FrameworkPropertyMetadata(true));
4747

48-
internal PlacementAlignment Alignment;
48+
public PlacementAlignment Alignment;
4949

5050
static ResizeThumb()
5151
{

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
2929
/// <summary>
3030
/// Display height of the element.
3131
/// </summary>
32-
class HeightDisplay : Control
32+
public class HeightDisplay : Control
3333
{
3434
static HeightDisplay()
3535
{
@@ -40,7 +40,7 @@ static HeightDisplay()
4040
/// <summary>
4141
/// Display width of the element.
4242
/// </summary>
43-
class WidthDisplay : Control
43+
public class WidthDisplay : Control
4444
{
4545
static WidthDisplay()
4646
{

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,19 @@ namespace ICSharpCode.WpfDesign.Designer
3131
{
3232
public static class ExtensionMethods
3333
{
34+
35+
public static bool AnyIsInNamespace(this Type type, string namespacestr)
36+
{
37+
Type t = type;
38+
while (t!=null)
39+
{
40+
if (t.Namespace.Equals(namespacestr))
41+
return true;
42+
t = t.BaseType;
43+
}
44+
return false;
45+
}
46+
3447
public static double Coerce(this double value, double min, double max)
3548
{
3649
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
@@ -32,7 +32,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
3232
/// Extends the Quick operation menu for the designer.
3333
/// </summary>
3434
[ExtensionFor(typeof (FrameworkElement))]
35-
class QuickOperationMenuExtension : PrimarySelectionAdornerProvider
35+
public class QuickOperationMenuExtension : PrimarySelectionAdornerProvider
3636
{
3737
private QuickOperationMenu _menu;
3838
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
@@ -33,7 +33,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
3333
/// Display Height/Width on the primary selection
3434
/// </summary>
3535
[ExtensionFor(typeof(UIElement))]
36-
class SizeDisplayExtension : PrimarySelectionAdornerProvider
36+
public class SizeDisplayExtension : PrimarySelectionAdornerProvider
3737
{
3838
HeightDisplay _heightDisplay;
3939
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
@@ -20,6 +20,7 @@
2020
using System;
2121
using System.Diagnostics;
2222
using System.Windows.Input;
23+
using System.Windows.Controls;
2324
using ICSharpCode.WpfDesign.Adorners;
2425
using ICSharpCode.WpfDesign.Designer.Controls;
2526

@@ -176,7 +177,12 @@ internal static bool AddItemWithDefaultSize(DesignItem container, DesignItem cre
176177

177178
internal static bool AddItemWithCustomSize(DesignItem container, DesignItem createdItem, Point position, Size size)
178179
{
179-
180+
bool b = createdItem.View.GetType().AnyIsInNamespace("System.Windows.Shapes");
181+
if (b)
182+
{
183+
createdItem.View.SetValue(Canvas.LeftProperty, position.X);
184+
createdItem.View.SetValue(Canvas.TopProperty, position.Y);
185+
}
180186
PlacementOperation operation = PlacementOperation.TryStartInsertNewComponents(
181187
container,
182188
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
@@ -17,6 +17,7 @@
1717
// DEALINGS IN THE SOFTWARE.
1818

1919
using System;
20+
using System.Collections.Generic;
2021

2122
namespace ICSharpCode.WpfDesign.Extensions
2223
{
@@ -28,6 +29,7 @@ public sealed class ExtensionForAttribute : Attribute
2829
{
2930
Type _designedItemType;
3031
Type _overrideExtension;
32+
List<Type> _overrideExtensions = new List<Type>();
3133

3234
/// <summary>
3335
/// Gets the type of the item that is designed using this extension.
@@ -36,6 +38,18 @@ public Type DesignedItemType {
3638
get { return _designedItemType; }
3739
}
3840

41+
/// <summary>
42+
/// Gets/Sets the types of another extension that this extension is overriding.
43+
/// </summary>
44+
public Type[] OverrideExtensions
45+
{
46+
get { return _overrideExtensions.ToArray(); }
47+
set
48+
{
49+
_overrideExtensions.AddRange(value);
50+
}
51+
}
52+
3953
/// <summary>
4054
/// Gets/Sets the type of another extension that this extension is overriding.
4155
/// </summary>
@@ -47,6 +61,8 @@ public Type OverrideExtension {
4761
if (!typeof(Extension).IsAssignableFrom(value)) {
4862
throw new ArgumentException("OverrideExtension must specify the type of an Extension.");
4963
}
64+
if(!_overrideExtensions.Contains(value))
65+
_overrideExtensions.Add(value);
5066
}
5167
}
5268
}

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

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,19 @@ sealed class ExtensionEntry
6464
{
6565
internal readonly Type ExtensionType;
6666
internal readonly ExtensionServer Server;
67-
internal readonly Type OverriddenExtensionType;
67+
internal readonly List<Type> OverriddenExtensionTypes = new List<Type>();
6868

6969
public ExtensionEntry(Type extensionType, ExtensionServer server, Type overriddenExtensionType)
7070
{
7171
this.ExtensionType = extensionType;
7272
this.Server = server;
73-
this.OverriddenExtensionType = overriddenExtensionType;
73+
this.OverriddenExtensionTypes.Add(overriddenExtensionType);
74+
}
75+
public ExtensionEntry(Type extensionType, ExtensionServer server, List<Type> overriddenExtensionTypes)
76+
{
77+
this.ExtensionType = extensionType;
78+
this.Server = server;
79+
this.OverriddenExtensionTypes= overriddenExtensionTypes;
7480
}
7581
}
7682

@@ -87,23 +93,18 @@ void AddExtensionEntry(Type extendedItemType, ExtensionEntry entry)
8793

8894
List<ExtensionEntry> GetExtensionEntries(Type extendedItemType)
8995
{
90-
List<ExtensionEntry> result;
91-
if (extendedItemType.BaseType != null)
92-
result = GetExtensionEntries(extendedItemType.BaseType);
93-
else
94-
result = new List<ExtensionEntry>();
95-
96-
List<ExtensionEntry> list;
97-
if (_extensions.TryGetValue(extendedItemType, out list)) {
98-
foreach (ExtensionEntry entry in list) {
99-
if (entry.OverriddenExtensionType != null) {
100-
result.RemoveAll(delegate(ExtensionEntry oldEntry) {
101-
return oldEntry.ExtensionType == entry.OverriddenExtensionType;
102-
});
103-
}
96+
List<ExtensionEntry> result = new List<ExtensionEntry>();
97+
List<Type> overriddenExtensions = new List<Type>();
98+
IEnumerable<ExtensionEntry> ie = _extensions.Where(x => x.Key.IsAssignableFrom(extendedItemType)).SelectMany(x => x.Value);
99+
foreach (ExtensionEntry entry in ie) {
100+
if (!overriddenExtensions.Contains(entry.ExtensionType)) {
101+
overriddenExtensions.AddRange(entry.OverriddenExtensionTypes);
102+
103+
result.RemoveAll(x => overriddenExtensions.Contains(x.ExtensionType));
104104
result.Add(entry);
105105
}
106106
}
107+
107108
return result;
108109
}
109110

0 commit comments

Comments
 (0)