Browse Source

Merge branch 'WpfDesignerPropGrid' of git://github.com/gumme/SharpDevelop into gumme-WpfDesignerPropGrid

Conflicts:
	src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
	src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs
	src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs
	src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj
pull/520/head
Siegfried Pammer 11 years ago
parent
commit
98aa45acee
  1. 4
      samples/XamlDesigner/Document.cs
  2. 1
      src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj
  3. 9
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
  4. 7
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs
  5. 220
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs
  6. 225
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs
  7. 18
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs
  8. 2
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/CollectionEditor.xaml.cs
  9. 1
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs
  10. 19
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs
  11. 7
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs
  12. 1
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj
  13. 2
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/HierarchyTests.cs
  14. 16
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/InsertTests.cs
  15. 2
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/SelectionTests.cs
  16. 9
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs

4
samples/XamlDesigner/Document.cs

@ -153,9 +153,9 @@ namespace ICSharpCode.XamlDesigner
} }
} }
OutlineNode outlineRoot; IOutlineNode outlineRoot;
public OutlineNode OutlineRoot { public IOutlineNode OutlineRoot {
get { get {
return outlineRoot; return outlineRoot;
} }

1
src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj

@ -54,6 +54,7 @@
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Design" /> <Reference Include="System.Design" />
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.Drawing" />
<Reference Include="System.Drawing.Design" /> <Reference Include="System.Drawing.Design" />
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml"> <Reference Include="System.Xaml">

9
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs

@ -112,11 +112,14 @@ namespace ICSharpCode.WpfDesign.Designer
bool continueHitTest = true; bool continueHitTest = true;
HitTestFilterCallback filterBehavior = CustomHitTestFilterBehavior ?? FilterHitTestInvisibleElements;
CustomHitTestFilterBehavior = null;
hitTestElements.Clear(); hitTestElements.Clear();
if (testAdorners) { if (testAdorners) {
RunHitTest( RunHitTest(
_adornerLayer, mousePosition, FilterHitTestInvisibleElements, _adornerLayer, mousePosition, filterBehavior,
delegate(HitTestResult result) { delegate(HitTestResult result) {
if (result != null && result.VisualHit != null && result.VisualHit is Visual) { if (result != null && result.VisualHit != null && result.VisualHit is Visual) {
DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit); DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit);
@ -138,7 +141,7 @@ namespace ICSharpCode.WpfDesign.Designer
if (continueHitTest && testDesignSurface) { if (continueHitTest && testDesignSurface) {
RunHitTest( RunHitTest(
this.Child, mousePosition, FilterHitTestInvisibleElements, this.Child, mousePosition, filterBehavior,
delegate(HitTestResult result) { delegate(HitTestResult result) {
if (result != null && result.VisualHit != null && result.VisualHit is Visual) { if (result != null && result.VisualHit != null && result.VisualHit is Visual) {
DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit); DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit);
@ -210,6 +213,8 @@ namespace ICSharpCode.WpfDesign.Designer
#region Properties #region Properties
//Set custom HitTestFilterCallbak
public HitTestFilterCallback CustomHitTestFilterBehavior { get; set; }
/// <summary> /// <summary>
/// Gets/Sets the design context. /// Gets/Sets the design context.
/// </summary> /// </summary>

7
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs

@ -40,10 +40,11 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
} }
public static readonly DependencyProperty RootProperty = public static readonly DependencyProperty RootProperty =
DependencyProperty.Register("Root", typeof(OutlineNode), typeof(Outline)); DependencyProperty.Register("Root", typeof(IOutlineNode), typeof(Outline));
public OutlineNode Root { public IOutlineNode Root
get { return (OutlineNode)GetValue(RootProperty); } {
get { return (IOutlineNode)GetValue(RootProperty); }
set { SetValue(RootProperty, value); } set { SetValue(RootProperty, value); }
} }

220
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs

@ -34,138 +34,45 @@ using ICSharpCode.WpfDesign.XamlDom;
namespace ICSharpCode.WpfDesign.Designer.OutlineView namespace ICSharpCode.WpfDesign.Designer.OutlineView
{ {
public class OutlineNode : INotifyPropertyChanged public interface IOutlineNode
{ {
//Used to check if element can enter other containers ISelectionService SelectionService { get; }
public static PlacementType DummyPlacementType; bool IsExpanded { get; set; }
DesignItem DesignItem { get; set; }
bool IsSelected { get; set; }
bool IsDesignTimeVisible { get; set; }
bool IsDesignTimeLocked { get; }
string Name { get; }
bool CanInsert(IEnumerable<IOutlineNode> nodes, IOutlineNode after, bool copy);
void Insert(IEnumerable<IOutlineNode> nodes, IOutlineNode after, bool copy);
ObservableCollection<IOutlineNode> Children{ get; }
}
static OutlineNode()
{
DummyPlacementType = PlacementType.Register("DummyPlacement");
}
public static OutlineNode Create(DesignItem designItem)
{
OutlineNode node;
if (!outlineNodes.TryGetValue(designItem, out node)) {
node = new OutlineNode(designItem);
outlineNodes[designItem] = node;
}
return node;
}
public class OutlineNode: OutlineNodeBase
{
//TODO: Reset with DesignContext //TODO: Reset with DesignContext
static Dictionary<DesignItem, OutlineNode> outlineNodes = new Dictionary<DesignItem, OutlineNode>(); static Dictionary<DesignItem, IOutlineNode> outlineNodes = new Dictionary<DesignItem, IOutlineNode>();
OutlineNode(DesignItem designItem) protected OutlineNode(DesignItem designitem): base(designitem)
{ {
DesignItem = designItem;
UpdateChildren(); UpdateChildren();
var hidden = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).ValueOnInstance;
if (hidden != null && (bool) hidden == true) {
this._isDesignTimeVisible = false;
((FrameworkElement) this.DesignItem.Component).Visibility = Visibility.Hidden;
}
var locked = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance;
if (locked != null && (bool) locked == true) {
this._isDesignTimeLocked = true;
}
//TODO
DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged);
DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged);
SelectionService.SelectionChanged += new EventHandler<DesignItemCollectionEventArgs>(Selection_SelectionChanged); SelectionService.SelectionChanged += new EventHandler<DesignItemCollectionEventArgs>(Selection_SelectionChanged);
} }
public DesignItem DesignItem { get; private set; } static OutlineNode()
public ISelectionService SelectionService {
get { return DesignItem.Services.Selection; }
}
bool isExpanded = true;
public bool IsExpanded {
get {
return isExpanded;
}
set {
isExpanded = value;
RaisePropertyChanged("IsExpanded");
}
}
bool isSelected;
public bool IsSelected {
get {
return isSelected;
}
set {
if (isSelected != value) {
isSelected = value;
SelectionService.SetSelectedComponents(new[] { DesignItem },
value ? SelectionTypes.Add : SelectionTypes.Remove);
RaisePropertyChanged("IsSelected");
}
}
}
bool _isDesignTimeVisible = true;
public bool IsDesignTimeVisible
{ {
get { DummyPlacementType = PlacementType.Register("DummyPlacement");
return _isDesignTimeVisible;
}
set {
_isDesignTimeVisible = value;
var ctl = DesignItem.Component as UIElement;
ctl.Visibility = _isDesignTimeVisible ? Visibility.Visible : Visibility.Hidden;
RaisePropertyChanged("IsDesignTimeVisible");
if (!value)
DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).SetValue(true);
else
DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).Reset();
}
} }
bool _isDesignTimeLocked = false; public static IOutlineNode Create(DesignItem designItem)
public bool IsDesignTimeLocked
{ {
get { IOutlineNode node;
return _isDesignTimeLocked; if (!outlineNodes.TryGetValue(designItem, out node)) {
} node = new OutlineNode(designItem);
set { outlineNodes[designItem] = node;
_isDesignTimeLocked = value;
((XamlDesignItem)DesignItem).IsDesignTimeLocked = _isDesignTimeLocked;
RaisePropertyChanged("IsDesignTimeLocked");
// if (value)
// DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true);
// else
// DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset();
}
}
ObservableCollection<OutlineNode> children = new ObservableCollection<OutlineNode>();
public ObservableCollection<OutlineNode> Children {
get { return children; }
}
public string Name {
get {
if (string.IsNullOrEmpty(DesignItem.Name)) {
return DesignItem.ComponentType.Name;
}
return DesignItem.ComponentType.Name + " (" + DesignItem.Name + ")";
} }
return node;
} }
void Selection_SelectionChanged(object sender, DesignItemCollectionEventArgs e) void Selection_SelectionChanged(object sender, DesignItemCollectionEventArgs e)
@ -173,19 +80,7 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
IsSelected = DesignItem.Services.Selection.IsComponentSelected(DesignItem); IsSelected = DesignItem.Services.Selection.IsComponentSelected(DesignItem);
} }
void DesignItem_NameChanged(object sender, EventArgs e) protected override void UpdateChildren()
{
RaisePropertyChanged("Name");
}
void DesignItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == DesignItem.ContentPropertyName) {
UpdateChildren();
}
}
void UpdateChildren()
{ {
Children.Clear(); Children.Clear();
@ -193,8 +88,7 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
var content = DesignItem.ContentProperty; var content = DesignItem.ContentProperty;
if (content.IsCollection) { if (content.IsCollection) {
UpdateChildrenCore(content.CollectionElements); UpdateChildrenCore(content.CollectionElements);
} } else {
else {
if (content.Value != null) { if (content.Value != null) {
UpdateChildrenCore(new[] { content.Value }); UpdateChildrenCore(new[] { content.Value });
} }
@ -208,16 +102,12 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
if (ModelTools.CanSelectComponent(item)) { if (ModelTools.CanSelectComponent(item)) {
var node = OutlineNode.Create(item); var node = OutlineNode.Create(item);
Children.Add(node); Children.Add(node);
} } else {
else
{
var content = item.ContentProperty; var content = item.ContentProperty;
if (content != null) if (content != null) {
{
if (content.IsCollection) { if (content.IsCollection) {
UpdateChildrenCore(content.CollectionElements); UpdateChildrenCore(content.CollectionElements);
} } else {
else {
if (content.Value != null) { if (content.Value != null) {
UpdateChildrenCore(new[] { content.Value }); UpdateChildrenCore(new[] { content.Value });
} }
@ -226,57 +116,5 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
} }
} }
} }
public bool CanInsert(IEnumerable<OutlineNode> nodes, OutlineNode after, bool copy)
{
var placementBehavior = DesignItem.GetBehavior<IPlacementBehavior>();
if (placementBehavior == null)
return false;
var operation = PlacementOperation.Start(nodes.Select(node => node.DesignItem).ToArray(), DummyPlacementType);
if (operation != null) {
bool canEnter = placementBehavior.CanEnterContainer(operation, true);
operation.Abort();
return canEnter;
}
return false;
}
public void Insert(IEnumerable<OutlineNode> nodes, OutlineNode after, bool copy)
{
using (var moveTransaction = DesignItem.Context.OpenGroup("Item moved in outline view", nodes.Select(n => n.DesignItem).ToList())) {
if (copy) {
nodes = nodes.Select(n => OutlineNode.Create(n.DesignItem.Clone())).ToList();
} else {
foreach (var node in nodes) {
node.DesignItem.Remove();
}
}
var index = after == null ? 0 : Children.IndexOf(after) + 1;
var content = DesignItem.ContentProperty;
if (content.IsCollection) {
foreach (var node in nodes) {
content.CollectionElements.Insert(index++, node.DesignItem);
}
} else {
content.SetValue(nodes.First().DesignItem);
}
moveTransaction.Commit();
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
void RaisePropertyChanged(string name)
{
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
#endregion
} }
} }

225
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs

@ -0,0 +1,225 @@
/*
* Created by SharpDevelop.
* User: trubra
* Date: 2014-01-28
* Time: 10:09
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows;
using System.Linq;
using ICSharpCode.WpfDesign.Designer.Xaml;
using ICSharpCode.WpfDesign.XamlDom;
namespace ICSharpCode.WpfDesign.Designer.OutlineView
{
/// <summary>
/// Description of OutlineNodeBase.
/// </summary>
public abstract class OutlineNodeBase : INotifyPropertyChanged, IOutlineNode
{
protected abstract void UpdateChildren();
//Used to check if element can enter other containers
protected static PlacementType DummyPlacementType;
protected OutlineNodeBase(DesignItem designItem)
{
DesignItem = designItem;
var hidden = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).ValueOnInstance;
if (hidden != null && (bool)hidden) {
_isDesignTimeVisible = false;
((FrameworkElement)DesignItem.Component).Visibility = Visibility.Hidden;
}
var locked = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance;
if (locked != null && (bool)locked) {
_isDesignTimeLocked = true;
}
//TODO
DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged);
DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged);
}
public DesignItem DesignItem { get; set; }
public ISelectionService SelectionService
{
get { return DesignItem.Services.Selection; }
}
bool isExpanded = true;
public bool IsExpanded
{
get
{
return isExpanded;
}
set
{
isExpanded = value;
RaisePropertyChanged("IsExpanded");
}
}
bool isSelected;
public bool IsSelected
{
get
{
return isSelected;
}
set
{
if (isSelected != value) {
isSelected = value;
SelectionService.SetSelectedComponents(new[] { DesignItem },
value ? SelectionTypes.Add : SelectionTypes.Remove);
RaisePropertyChanged("IsSelected");
}
}
}
bool _isDesignTimeVisible = true;
public bool IsDesignTimeVisible
{
get
{
return _isDesignTimeVisible;
}
set
{
_isDesignTimeVisible = value;
var ctl = DesignItem.Component as UIElement;
if(ctl!=null)
ctl.Visibility = _isDesignTimeVisible ? Visibility.Visible : Visibility.Hidden;
RaisePropertyChanged("IsDesignTimeVisible");
if (!value)
DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).SetValue(true);
else
DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).Reset();
}
}
bool _isDesignTimeLocked = false;
public bool IsDesignTimeLocked
{
get
{
return _isDesignTimeLocked;
}
set
{
_isDesignTimeLocked = value;
((XamlDesignItem)DesignItem).IsDesignTimeLocked = _isDesignTimeLocked;
RaisePropertyChanged("IsDesignTimeLocked");
// if (value)
// DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true);
// else
// DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset();
}
}
ObservableCollection<IOutlineNode> children = new ObservableCollection<IOutlineNode>();
public ObservableCollection<IOutlineNode> Children
{
get { return children; }
}
public string Name
{
get
{
if (string.IsNullOrEmpty(DesignItem.Name)) {
return DesignItem.ComponentType.Name;
}
return DesignItem.ComponentType.Name + " (" + DesignItem.Name + ")";
}
}
void DesignItem_NameChanged(object sender, EventArgs e)
{
RaisePropertyChanged("Name");
}
void DesignItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == DesignItem.ContentPropertyName) {
UpdateChildren();
}
}
public bool CanInsert(IEnumerable<IOutlineNode> nodes, IOutlineNode after, bool copy)
{
var placementBehavior = DesignItem.GetBehavior<IPlacementBehavior>();
if (placementBehavior == null)
return false;
var operation = PlacementOperation.Start(nodes.Select(node => node.DesignItem).ToArray(), DummyPlacementType);
if (operation != null) {
bool canEnter = placementBehavior.CanEnterContainer(operation, true);
operation.Abort();
return canEnter;
}
return false;
}
public virtual void Insert(IEnumerable<IOutlineNode> nodes, IOutlineNode after, bool copy)
{
using (var moveTransaction = DesignItem.Context.OpenGroup("Item moved in outline view", nodes.Select(n => n.DesignItem).ToList()))
{
if (copy) {
nodes = nodes.Select(n => OutlineNode.Create(n.DesignItem.Clone())).ToList();
} else {
foreach (var node in nodes) {
node.DesignItem.Remove();
}
}
var index = after == null ? 0 : Children.IndexOf(after) + 1;
var content = DesignItem.ContentProperty;
if (content.IsCollection) {
foreach (var node in nodes) {
content.CollectionElements.Insert(index++, node.DesignItem);
}
} else {
content.SetValue(nodes.First().DesignItem);
}
moveTransaction.Commit();
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
#endregion
}
}

18
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs

@ -28,30 +28,30 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
protected override bool CanInsert(DragTreeViewItem target, DragTreeViewItem[] items, DragTreeViewItem after, bool copy) protected override bool CanInsert(DragTreeViewItem target, DragTreeViewItem[] items, DragTreeViewItem after, bool copy)
{ {
UpdateCustomNodes(items); UpdateCustomNodes(items);
return (target.DataContext as OutlineNode).CanInsert(_customOutlineNodes, return (target.DataContext as IOutlineNode).CanInsert(_customOutlineNodes,
after == null ? null : after.DataContext as OutlineNode, copy); after == null ? null : after.DataContext as IOutlineNode, copy);
} }
protected override void Insert(DragTreeViewItem target, DragTreeViewItem[] items, DragTreeViewItem after, bool copy) protected override void Insert(DragTreeViewItem target, DragTreeViewItem[] items, DragTreeViewItem after, bool copy)
{ {
UpdateCustomNodes(items); UpdateCustomNodes(items);
(target.DataContext as OutlineNode).Insert(_customOutlineNodes, (target.DataContext as IOutlineNode).Insert(_customOutlineNodes,
after == null ? null : after.DataContext as OutlineNode, copy); after == null ? null : after.DataContext as IOutlineNode, copy);
} }
// Need to do this through a seperate List since previously LINQ queries apparently disconnected DataContext;bug in .NET 4.0 // Need to do this through a seperate List since previously LINQ queries apparently disconnected DataContext;bug in .NET 4.0
private List<OutlineNode> _customOutlineNodes; private List<IOutlineNode> _customOutlineNodes;
void UpdateCustomNodes(IEnumerable<DragTreeViewItem> items) void UpdateCustomNodes(IEnumerable<DragTreeViewItem> items)
{ {
_customOutlineNodes = new List<OutlineNode>(); _customOutlineNodes = new List<IOutlineNode>();
foreach (var item in items) foreach (var item in items)
_customOutlineNodes.Add(item.DataContext as OutlineNode); _customOutlineNodes.Add(item.DataContext as IOutlineNode);
} }
public override bool ShouldItemBeVisible(DragTreeViewItem dragTreeViewitem) public override bool ShouldItemBeVisible(DragTreeViewItem dragTreeViewitem)
{ {
var node = dragTreeViewitem.DataContext as OutlineNode; var node = dragTreeViewitem.DataContext as IOutlineNode;
return string.IsNullOrEmpty(Filter) || node.Name.ToLower().Contains(Filter.ToLower()); return string.IsNullOrEmpty(Filter) || node.Name.ToLower().Contains(Filter.ToLower());
} }
@ -60,7 +60,7 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
{ {
base.SelectOnly(item); base.SelectOnly(item);
var node = item.DataContext as OutlineNode; var node = item.DataContext as IOutlineNode;
var surface = node.DesignItem.View.TryFindParent<DesignSurface>(); var surface = node.DesignItem.View.TryFindParent<DesignSurface>();
if (surface != null) if (surface != null)

2
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/CollectionEditor.xaml.cs

@ -64,7 +64,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid.Editors
if(control!=null){ if(control!=null){
TypeMappings.TryGetValue(control.GetType(), out _type); TypeMappings.TryGetValue(control.GetType(), out _type);
if (_type != null) { if (_type != null) {
OutlineNode node = OutlineNode.Create(item); IOutlineNode node = OutlineNode.Create(item);
Outline.Root = node; Outline.Root = node;
PropertyGridView.PropertyGrid.SelectedItems = item.Services.Selection.SelectedItems; PropertyGridView.PropertyGrid.SelectedItems = item.Services.Selection.SelectedItems;
} }

1
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs

@ -42,7 +42,6 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid
DefaultStyleKeyProperty.OverrideMetadata(typeof(PropertyGridView), new FrameworkPropertyMetadata(typeof(PropertyGridView))); DefaultStyleKeyProperty.OverrideMetadata(typeof(PropertyGridView), new FrameworkPropertyMetadata(typeof(PropertyGridView)));
} }
public PropertyGridView() : this(null) public PropertyGridView() : this(null)
{ {
} }

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

@ -157,9 +157,26 @@ namespace ICSharpCode.WpfDesign.Designer.Services
return item; return item;
} }
public static bool AddItemWithCustomSizePosition(DesignItem container, Type createdItem, Size size, Point position)
{
CreateComponentTool cct = new CreateComponentTool(createdItem);
return AddItemWithCustomSize(container, cct.CreateItem(container.Context), position, size);
}
public static bool AddItemWithDefaultSize(DesignItem container, Type createdItem, Size size)
{
CreateComponentTool cct = new CreateComponentTool(createdItem);
return AddItemWithCustomSize(container, cct.CreateItem(container.Context), new Point(0, 0), size);
}
internal static bool AddItemWithDefaultSize(DesignItem container, DesignItem createdItem, Point position) internal static bool AddItemWithDefaultSize(DesignItem container, DesignItem createdItem, Point position)
{ {
var size = ModelTools.GetDefaultSize(createdItem); return AddItemWithCustomSize(container, createdItem, position, ModelTools.GetDefaultSize(createdItem));
}
internal static bool AddItemWithCustomSize(DesignItem container, DesignItem createdItem, Point position, Size size)
{
PlacementOperation operation = PlacementOperation.TryStartInsertNewComponents( PlacementOperation operation = PlacementOperation.TryStartInsertNewComponents(
container, container,
new DesignItem[] { createdItem }, new DesignItem[] { createdItem },

7
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs

@ -18,7 +18,7 @@
using System; using System;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Media;
namespace ICSharpCode.WpfDesign.Designer.Services namespace ICSharpCode.WpfDesign.Designer.Services
{ {
// See IToolService for description. // See IToolService for description.
@ -37,6 +37,11 @@ namespace ICSharpCode.WpfDesign.Designer.Services
}); });
} }
public HitTestFilterCallback DesignPanelHitTestFilterCallback
{
set{ _designPanel.CustomHitTestFilterBehavior = value; }
}
public void Dispose() public void Dispose()
{ {
if (_designPanel != null) { if (_designPanel != null) {

1
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj

@ -90,6 +90,7 @@
</Compile> </Compile>
<Compile Include="Extensions\RenderTransformOriginExtension.cs" /> <Compile Include="Extensions\RenderTransformOriginExtension.cs" />
<Compile Include="Extensions\RightClickContextMenuExtension.cs" /> <Compile Include="Extensions\RightClickContextMenuExtension.cs" />
<Compile Include="OutlineView\OutlineNodeBase.cs" />
<Compile Include="Extensions\RightClickMultipleItemsContextMenuExtension.cs" /> <Compile Include="Extensions\RightClickMultipleItemsContextMenuExtension.cs" />
<Compile Include="Extensions\RightClickMultipleItemsContextMenu.xaml.cs"> <Compile Include="Extensions\RightClickMultipleItemsContextMenu.xaml.cs">
<DependentUpon>RightClickMultipleItemsContextMenu.xaml</DependentUpon> <DependentUpon>RightClickMultipleItemsContextMenu.xaml</DependentUpon>

2
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/HierarchyTests.cs

@ -26,7 +26,7 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView
public class HierarchyTests : ModelTestHelper public class HierarchyTests : ModelTestHelper
{ {
private DesignItem _grid; private DesignItem _grid;
private OutlineNode _outline; private IOutlineNode _outline;
[TestFixtureSetUp] [TestFixtureSetUp]
public void Intialize() public void Intialize()

16
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/InsertTests.cs

@ -26,15 +26,15 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView
public class CollectionElementsInsertTests : ModelTestHelper public class CollectionElementsInsertTests : ModelTestHelper
{ {
private DesignItem _grid; private DesignItem _grid;
private OutlineNode _outline; private IOutlineNode _outline;
private DesignItem _gridButton; private DesignItem _gridButton;
private DesignItem _stackPanel; private DesignItem _stackPanel;
private DesignItem _stackPanelButton; private DesignItem _stackPanelButton;
private OutlineNode _gridButtonNode; private IOutlineNode _gridButtonNode;
private OutlineNode _stackPanelNode; private IOutlineNode _stackPanelNode;
private OutlineNode _stackPanelButtonNode; private IOutlineNode _stackPanelButtonNode;
[SetUp] [SetUp]
public void Intialize() public void Intialize()
@ -162,15 +162,15 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView
public class ContentControlInsertTests : ModelTestHelper public class ContentControlInsertTests : ModelTestHelper
{ {
private DesignItem _grid; private DesignItem _grid;
private OutlineNode _outline; private IOutlineNode _outline;
private DesignItem _gridButton; private DesignItem _gridButton;
private DesignItem _stackPanel; private DesignItem _stackPanel;
private DesignItem _stackPanelImage; private DesignItem _stackPanelImage;
private OutlineNode _gridButtonNode; private IOutlineNode _gridButtonNode;
private OutlineNode _stackPanelNode; private IOutlineNode _stackPanelNode;
private OutlineNode _stackPanelImageNode; private IOutlineNode _stackPanelImageNode;
[SetUp] [SetUp]
public void Intialize() public void Intialize()

2
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/SelectionTests.cs

@ -26,7 +26,7 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView
public class SelectionTests : ModelTestHelper public class SelectionTests : ModelTestHelper
{ {
private DesignItem _grid; private DesignItem _grid;
private OutlineNode _outline; private IOutlineNode _outline;
[SetUp] [SetUp]
public void Intialize() public void Intialize()

9
src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs

@ -21,6 +21,7 @@ using System.Collections.Generic;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Media;
using ICSharpCode.WpfDesign.Adorners; using ICSharpCode.WpfDesign.Adorners;
@ -53,6 +54,10 @@ namespace ICSharpCode.WpfDesign
/// </summary> /// </summary>
public interface IToolService public interface IToolService
{ {
/// <summary>
/// Set custom HitTestFilterCallback for DesignPanel
/// </summary>
HitTestFilterCallback DesignPanelHitTestFilterCallback{ set; }
/// <summary> /// <summary>
/// Gets the 'pointer' tool. /// Gets the 'pointer' tool.
/// The pointer tool is the default tool for selecting and moving elements. /// The pointer tool is the default tool for selecting and moving elements.
@ -77,6 +82,10 @@ namespace ICSharpCode.WpfDesign
public interface IDesignPanel : IInputElement public interface IDesignPanel : IInputElement
{ {
/// <summary> /// <summary>
/// Set a custom filter callback so that any element can be filtered out
/// </summary>
HitTestFilterCallback CustomHitTestFilterBehavior { get; set; }
/// <summary>
/// Gets the design context used by the DesignPanel. /// Gets the design context used by the DesignPanel.
/// </summary> /// </summary>
DesignContext Context { get; } DesignContext Context { get; }

Loading…
Cancel
Save