diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs index 754849fd7a..7e2cec2296 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs @@ -25,11 +25,11 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView } public static readonly DependencyProperty RootProperty = - DependencyProperty.Register("Root", typeof(IOutlineNode), typeof(Outline)); + DependencyProperty.Register("Root", typeof(IOutlineNode), typeof(Outline)); - public IOutlineNode Root - { - get { return (IOutlineNode)GetValue(RootProperty); } + public IOutlineNode Root + { + get { return (IOutlineNode)GetValue(RootProperty); } set { SetValue(RootProperty, value); } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs index 5508d1a1ed..5116f1f425 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs @@ -20,100 +20,85 @@ using ICSharpCode.WpfDesign.XamlDom; namespace ICSharpCode.WpfDesign.Designer.OutlineView { public interface IOutlineNode - { - ISelectionService SelectionService { get; } - 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 nodes, IOutlineNode after, bool copy); - void Insert(IEnumerable nodes, IOutlineNode after, bool copy); - } - + { + ISelectionService SelectionService { get; } + 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 nodes, IOutlineNode after, bool copy); + void Insert(IEnumerable nodes, IOutlineNode after, bool copy); + } + - public class OutlineNode: OutlineNodeBase - { - //TODO: Reset with DesignContext - static Dictionary outlineNodes = new Dictionary(); + public class OutlineNode: OutlineNodeBase + { + //TODO: Reset with DesignContext + static Dictionary outlineNodes = new Dictionary(); - protected OutlineNode(DesignItem designitem): base(designitem) - { - UpdateChildren(); - SelectionService.SelectionChanged += new EventHandler(Selection_SelectionChanged); - } + protected OutlineNode(DesignItem designitem): base(designitem) + { + UpdateChildren(); + SelectionService.SelectionChanged += new EventHandler(Selection_SelectionChanged); + } - static OutlineNode() - { - DummyPlacementType = PlacementType.Register("DummyPlacement"); - } + static OutlineNode() + { + DummyPlacementType = PlacementType.Register("DummyPlacement"); + } - public static IOutlineNode Create(DesignItem designItem) - { - IOutlineNode node; - if (!outlineNodes.TryGetValue(designItem, out node)) - { - node = new OutlineNode(designItem); - outlineNodes[designItem] = node; - } - return node; - } + public static IOutlineNode Create(DesignItem designItem) + { + IOutlineNode node; + if (!outlineNodes.TryGetValue(designItem, out node)) { + node = new OutlineNode(designItem); + outlineNodes[designItem] = node; + } + return node; + } - void Selection_SelectionChanged(object sender, DesignItemCollectionEventArgs e) - { - IsSelected = DesignItem.Services.Selection.IsComponentSelected(DesignItem); - } + void Selection_SelectionChanged(object sender, DesignItemCollectionEventArgs e) + { + IsSelected = DesignItem.Services.Selection.IsComponentSelected(DesignItem); + } - protected override void UpdateChildren() - { - Children.Clear(); + protected override void UpdateChildren() + { + Children.Clear(); - if (DesignItem.ContentPropertyName != null) - { - var content = DesignItem.ContentProperty; - if (content.IsCollection) - { - UpdateChildrenCore(content.CollectionElements); - } - else - { - if (content.Value != null) - { - UpdateChildrenCore(new[] { content.Value }); - } - } - } - } + if (DesignItem.ContentPropertyName != null) { + var content = DesignItem.ContentProperty; + if (content.IsCollection) { + UpdateChildrenCore(content.CollectionElements); + } else { + if (content.Value != null) { + UpdateChildrenCore(new[] { content.Value }); + } + } + } + } - void UpdateChildrenCore(IEnumerable items) - { - foreach (var item in items) - { - if (ModelTools.CanSelectComponent(item)) - { - var node = OutlineNode.Create(item); - Children.Add(node); - } - else - { - var content = item.ContentProperty; - if (content != null) - { - if (content.IsCollection) - { - UpdateChildrenCore(content.CollectionElements); - } - else - { - if (content.Value != null) - { - UpdateChildrenCore(new[] { content.Value }); - } - } - } - } - } - } - } -} + void UpdateChildrenCore(IEnumerable items) + { + foreach (var item in items) { + if (ModelTools.CanSelectComponent(item)) { + var node = OutlineNode.Create(item); + Children.Add(node); + } else { + var content = item.ContentProperty; + if (content != null) { + if (content.IsCollection) { + UpdateChildrenCore(content.CollectionElements); + } else { + if (content.Value != null) { + UpdateChildrenCore(new[] { content.Value }); + } + } + } + } + } + } + } +} diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs index 2e807f6967..648b4097ec 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs @@ -12,7 +12,7 @@ using System.Collections.ObjectModel; using System.ComponentModel; using System.Windows; using System.Linq; -using ICSharpCode.WpfDesign.Designer.Xaml; +using ICSharpCode.WpfDesign.Designer.Xaml; using ICSharpCode.WpfDesign.XamlDom; namespace ICSharpCode.WpfDesign.Designer.OutlineView @@ -21,219 +21,205 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView /// Description of OutlineNodeBase. /// 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 children = new ObservableCollection(); - - public ObservableCollection 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 nodes, IOutlineNode after, bool copy) - { - var placementBehavior = DesignItem.GetBehavior(); - 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 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 - } + { + + 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 children = new ObservableCollection(); + + public ObservableCollection 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 nodes, IOutlineNode after, bool copy) + { + var placementBehavior = DesignItem.GetBehavior(); + 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 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 + } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs index bb7003011d..40a2cb834a 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs @@ -51,7 +51,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid public PropertyGridGroupMode GroupMode { - get { return _groupMode; } + get { return _groupMode; } set { if (_groupMode != value) @@ -202,7 +202,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid if (selectedItems == null || selectedItems.Count == 0) return; if (selectedItems.Count == 1) SingleItem = selectedItems[0]; - + foreach (var md in GetDescriptors()) { if (PassesFilter(md.Name)) AddNode(md); @@ -210,7 +210,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid } finally { reloadActive = false; if (AggregatePropertiesUpdated != null) - AggregatePropertiesUpdated(this, EventArgs.Empty); + AggregatePropertiesUpdated(this, EventArgs.Empty); } }