Browse Source

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
pull/1/head
Tomáš Linhart 16 years ago
parent
commit
7c2e758ecd
  1. 8
      src/AddIns/Analysis/CodeQuality/Resources/GraphTemplate.xaml
  2. 128
      src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyGraphLayout.cs

8
src/AddIns/Analysis/CodeQuality/Resources/GraphTemplate.xaml

@ -45,6 +45,7 @@ @@ -45,6 +45,7 @@
<Setter Property="BorderThickness" Value="5,3,5,3"/>
<Setter Property="Padding" Value="10,5,10,5"/>
<Setter Property="BorderBrush" Value="#FF393939"/>
<Setter Property="Controls:DependencyGraphLayout.IsSelectingEnabled" Value="True" />
<Style.Triggers>
<Trigger Property="GraphSharp_Controls:GraphElementBehaviour.IsHighlighted" Value="True">
<Setter Property="BorderBrush" Value="{StaticResource HighlightedVertexBorderBrush}"/>
@ -56,6 +57,13 @@ @@ -56,6 +57,13 @@
<Setter Property="Background" Value="{StaticResource HighlightedVertexBackgroundBrush}"/>
<Setter Property="Foreground" Value="{StaticResource HighlightedVertexForegroundBrush}"/>
</Trigger>
<Trigger Property="Controls:DependencyGraphLayout.IsSelected" Value="True">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="#FFFFA500" />
</Setter.Value>
</Setter>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="GraphSharp_Controls:GraphElementBehaviour.IsSemiHighlighted" Value="True"/>

128
src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyGraphLayout.cs

@ -13,13 +13,85 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls @@ -13,13 +13,85 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
{
public class DependencyGraphLayout : GraphLayout<DependencyVertex, DependencyEdge, DependencyGraph>
{
private Style _defaultVertexControlStyle;
public event MouseButtonEventHandler VertexClick;
public event MouseButtonEventHandler VertexRightClick;
public event EventHandler<SelectedVertexEventArgs> 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 @@ -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 @@ -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;
}
}
}
}

Loading…
Cancel
Save