From 7c2e758ecd5a2b54df8d0bf29a944b2999fb5ff1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Linhart?= Date: Tue, 27 Jul 2010 12:34:36 +0000 Subject: [PATCH] Selection for nodes is now done by DependencyProperties. Style for selected node was moved to XAML. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@6273 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../CodeQuality/Resources/GraphTemplate.xaml | 8 ++ .../Src/Controls/DependencyGraphLayout.cs | 134 +++++++++++++----- 2 files changed, 104 insertions(+), 38 deletions(-) diff --git a/src/AddIns/Analysis/CodeQuality/Resources/GraphTemplate.xaml b/src/AddIns/Analysis/CodeQuality/Resources/GraphTemplate.xaml index 8e361f00f2..50f24e0ff4 100644 --- a/src/AddIns/Analysis/CodeQuality/Resources/GraphTemplate.xaml +++ b/src/AddIns/Analysis/CodeQuality/Resources/GraphTemplate.xaml @@ -45,6 +45,7 @@ + @@ -56,6 +57,13 @@ + + + + + + + diff --git a/src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyGraphLayout.cs b/src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyGraphLayout.cs index bd2b8ce0c3..af0ae6540d 100644 --- a/src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyGraphLayout.cs +++ b/src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyGraphLayout.cs @@ -13,13 +13,85 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls { public class DependencyGraphLayout : GraphLayout { - private Style _defaultVertexControlStyle; - public event MouseButtonEventHandler VertexClick; public event MouseButtonEventHandler VertexRightClick; - + public event EventHandler SelectedVertexChanged; + public VertexControl SelectedVertexControl { get; set; } + + #region DependencyProperty for VertexControl.IsSelected + + public static readonly DependencyProperty IsSelectingEnabledProperty = + DependencyProperty.RegisterAttached("IsSelectingEnabled", + typeof(bool), + typeof(DependencyGraphLayout), + new UIPropertyMetadata(false, OnIsSelectingEnabledPropertyChanged)); + + public static readonly DependencyProperty IsSelectedProperty = + DependencyProperty.RegisterAttached("IsSelected", + typeof(bool), + typeof(DependencyGraphLayout), + new UIPropertyMetadata(false)); + + public static bool GetIsSelectingEnabled(DependencyObject obj) + { + return (bool)obj.GetValue(IsSelectingEnabledProperty); + } + + public static void SetIsSelectingEnabled(DependencyObject obj, bool value) + { + obj.SetValue(IsSelectingEnabledProperty, value); + } + + public static bool GetIsSelected(DependencyObject obj) + { + return (bool)obj.GetValue(IsSelectedProperty); + } + public static void SetIsSelected(DependencyObject obj, bool value) + { + if (obj != null) + obj.SetValue(IsSelectedProperty, value); + } + + private static void OnIsSelectingEnabledPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) + { + if (e.NewValue is bool == false) + return; + + var vertex = obj as VertexControl; + + if (obj == null) + return; + + var graphLayout = vertex.RootCanvas as DependencyGraphLayout; + + if (graphLayout == null) + return; + + if ((bool)e.NewValue) + graphLayout.SelectedVertexChanged += OnSelectedVertexChanged; + else + graphLayout.SelectedVertexChanged -= OnSelectedVertexChanged; + } + + public static void OnSelectedVertexChanged(object sender, SelectedVertexEventArgs e) + { + var vertex = sender as VertexControl; + + if (vertex == null) + return; + + if (e.New == vertex) { + SetIsSelected(e.New as DependencyObject, true); + SetIsSelected(e.Old as DependencyObject, false); + } + else + SetIsSelected(e.Old as DependencyObject, false); + } + + #endregion + public void ChangeGraph(DependencyGraph graph) { try { @@ -246,46 +318,19 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls if (VertexClick != null) VertexClick(sender, e); + // selection for nodes var vertex = sender as VertexControl; - if (vertex != null) - { - if (SelectedVertexControl == vertex) - { - SelectedVertexControl.Style = _defaultVertexControlStyle; + if (vertex != null) { + if (SelectedVertexControl == vertex) { SelectedVertexControl = null; + SelectedVertexChanged(sender, new SelectedVertexEventArgs(null, vertex)); return; } - - if (SelectedVertexControl != null) - { - SelectedVertexControl.Style = vertex.Style; - } - + + if (SelectedVertexChanged != null) + SelectedVertexChanged(sender, new SelectedVertexEventArgs(vertex, SelectedVertexControl)); + SelectedVertexControl = vertex; - - _defaultVertexControlStyle = vertex.Style; - - // workaround which doesnt brake triggers of highlighting - var style = new Style(); - - foreach (Setter setter in vertex.Style.Setters) - { - style.Setters.Add(setter); - } - - foreach (var trigger in vertex.Style.Triggers) - { - style.Triggers.Add(trigger); - } - - style.Setters.Add(new Setter - { - Property = Control.BackgroundProperty, - Value = new SolidColorBrush(Color.FromRgb(255, 165, 0)) // orange - }); - - - SelectedVertexControl.Style = style; } } @@ -307,5 +352,18 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls if (_vertexControls.Count > 0) base.ContinueLayout(); } + + public class SelectedVertexEventArgs : EventArgs + { + public VertexControl New { get; set; } + public VertexControl Old { get; set; } + + public SelectedVertexEventArgs(VertexControl @new, VertexControl old) + { + New = @new; + Old = old; + } + + } } }