From 3334501225664bc417ea162b8a9def8abe7fed58 Mon Sep 17 00:00:00 2001 From: Tomas Linhart Date: Sun, 4 Sep 2011 18:50:30 +0200 Subject: [PATCH] Fix issue with highlighting line from tree in matrix control --- .../Src/Controls/DependencyColorizer.cs | 4 ++-- .../Src/Controls/DependencyMatrix.cs | 3 +++ .../CodeQuality/Src/Controls/MatrixControl.cs | 23 +++++++++++++++---- .../Src/Controls/TreeMatrixControl.xaml.cs | 8 ++----- src/AddIns/Analysis/CodeQuality/Src/Field.cs | 6 +++++ src/AddIns/Analysis/CodeQuality/Src/Method.cs | 6 +++++ .../Analysis/CodeQuality/Src/Relationship.cs | 3 +++ 7 files changed, 41 insertions(+), 12 deletions(-) diff --git a/src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyColorizer.cs b/src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyColorizer.cs index f460fad867..742d3e2449 100644 --- a/src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyColorizer.cs +++ b/src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyColorizer.cs @@ -42,9 +42,9 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls return Colors.Transparent; if (relationship.Relationships.Any(r => r == RelationshipType.UseThis)) - return Colors.Azure; + return Colors.LightBlue; if (relationship.Relationships.Any(r => r == RelationshipType.UsedBy)) - return Colors.Beige; + return Colors.Violet; if (relationship.Relationships.Any(r => r == RelationshipType.Same)) return Colors.Gray; diff --git a/src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyMatrix.cs b/src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyMatrix.cs index a8bc4dff7f..45c8250255 100644 --- a/src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyMatrix.cs +++ b/src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyMatrix.cs @@ -16,6 +16,9 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls var toRelationship = HeaderRows[rowIndex].Value.GetRelationship(HeaderColumns[columnIndex].Value); var fromRelationship = HeaderColumns[columnIndex].Value.GetRelationship(HeaderRows[rowIndex].Value); + toRelationship.From = HeaderRows[rowIndex].Value; + toRelationship.To = HeaderColumns[columnIndex].Value; + // add other way foreach (var relationship in fromRelationship.Relationships) { if (relationship == RelationshipType.UseThis) diff --git a/src/AddIns/Analysis/CodeQuality/Src/Controls/MatrixControl.cs b/src/AddIns/Analysis/CodeQuality/Src/Controls/MatrixControl.cs index 073bd181f5..d864fec0f7 100644 --- a/src/AddIns/Analysis/CodeQuality/Src/Controls/MatrixControl.cs +++ b/src/AddIns/Analysis/CodeQuality/Src/Controls/MatrixControl.cs @@ -105,17 +105,24 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls { var items = type == HeaderType.Columns ? matrix.HeaderColumns : matrix.HeaderRows; for (int i = 0; i < items.Count; i++) { - if (node.Equals(items[i])) { + if (items[i].Value.Equals(node)) { + if (currentCell.X == i && type == HeaderType.Rows) + return; + if (currentCell.Y == i && type == HeaderType.Columns) + return; + currentCell = type == HeaderType.Columns ? new Coords(i, currentCell.Y) : new Coords(currentCell.X, i); SetHoveredCell(); + InvalidateVisual(); + + return; } } } - protected override void OnMouseMove(System.Windows.Input.MouseEventArgs e) { base.OnMouseMove(e); @@ -137,6 +144,14 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls } } + protected override void OnMouseDown(System.Windows.Input.MouseButtonEventArgs e) + { + base.OnMouseDown(e); + Relationship relationship = HoveredCell.Value as Relationship; + Console.WriteLine("To: " + relationship.To.Name); + Console.WriteLine("From:" + relationship.From.Name); + } + protected void SetHoveredCell() { HoveredCell.RowIndex = currentCell.Y; @@ -157,8 +172,8 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls // how many cells we will draw // sometimes happens when half of cell is hidden in scroll so text isnt drawn // so lets drawn one more cell - var cellsHorizontally = maxWidth > matrixWidth ? matrixWidth : maxWidth + 1; - var cellsVertically = maxHeight > matrixHeight ? matrixHeight : maxHeight + 1; + var cellsHorizontally = maxWidth >= matrixWidth ? matrixWidth : maxWidth + 1; + var cellsVertically = maxHeight >= matrixHeight ? matrixHeight : maxHeight + 1; // number of cell which will be drawn var scaledOffsetX = (int)offset.X / CellWidth; diff --git a/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml.cs b/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml.cs index 2ade3a5049..531770411d 100644 --- a/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml.cs +++ b/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml.cs @@ -96,9 +96,7 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls if (rebuildLeftNodeListRequested) return; rebuildLeftNodeListRequested = true; - Dispatcher.BeginInvoke( - DispatcherPriority.DataBind, - new Action(SetVisibleItemsForRows)); + Dispatcher.BeginInvoke(DispatcherPriority.DataBind, new Action(SetVisibleItemsForRows)); } void SetVisibleItemsForRows() @@ -120,9 +118,7 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls if (rebuildTopNodeListRequested) return; rebuildTopNodeListRequested = true; - Dispatcher.BeginInvoke( - DispatcherPriority.DataBind, - new Action(SetVisibleItemsForColumns)); + Dispatcher.BeginInvoke(DispatcherPriority.DataBind, new Action(SetVisibleItemsForColumns)); } void SetVisibleItemsForColumns() diff --git a/src/AddIns/Analysis/CodeQuality/Src/Field.cs b/src/AddIns/Analysis/CodeQuality/Src/Field.cs index 1a28f15ae4..e6dc66de4d 100644 --- a/src/AddIns/Analysis/CodeQuality/Src/Field.cs +++ b/src/AddIns/Analysis/CodeQuality/Src/Field.cs @@ -86,6 +86,12 @@ namespace ICSharpCode.CodeQualityAnalysis public Relationship GetRelationship(INode node) { Relationship relationship = new Relationship(); + + if (node == this) { + relationship.Relationships.Add(RelationshipType.Same); + return relationship; + } + return relationship; } diff --git a/src/AddIns/Analysis/CodeQuality/Src/Method.cs b/src/AddIns/Analysis/CodeQuality/Src/Method.cs index a96fc7bed7..d988320720 100644 --- a/src/AddIns/Analysis/CodeQuality/Src/Method.cs +++ b/src/AddIns/Analysis/CodeQuality/Src/Method.cs @@ -148,6 +148,12 @@ namespace ICSharpCode.CodeQualityAnalysis public Relationship GetRelationship(INode node) { Relationship relationship = new Relationship(); + + if (node == this) { + relationship.Relationships.Add(RelationshipType.Same); + return relationship; + } + return relationship; } diff --git a/src/AddIns/Analysis/CodeQuality/Src/Relationship.cs b/src/AddIns/Analysis/CodeQuality/Src/Relationship.cs index c7ebf8371c..76b83422bb 100644 --- a/src/AddIns/Analysis/CodeQuality/Src/Relationship.cs +++ b/src/AddIns/Analysis/CodeQuality/Src/Relationship.cs @@ -18,6 +18,9 @@ namespace ICSharpCode.CodeQualityAnalysis public string Text { get { return OccurrenceCount.ToString(); } } + public INode To { get; set; } + public INode From { get; set; } + public Relationship() { Relationships = new HashSet();