diff --git a/src/AddIns/Analysis/CodeQuality/CodeQualityAnalysis.csproj b/src/AddIns/Analysis/CodeQuality/CodeQualityAnalysis.csproj index 54181f47ab..aa5dabb6e0 100644 --- a/src/AddIns/Analysis/CodeQuality/CodeQualityAnalysis.csproj +++ b/src/AddIns/Analysis/CodeQuality/CodeQualityAnalysis.csproj @@ -6,7 +6,7 @@ 8.0.30703 2.0 {76DD1CC0-0D86-44A1-9BD6-D91F79807BC3} - WinExe + Exe Properties ICSharpCode.CodeQualityAnalysis CodeQualityAnalysis @@ -129,7 +129,6 @@ - @@ -143,6 +142,7 @@ + diff --git a/src/AddIns/Analysis/CodeQuality/CodeQualityAnalysis.sln b/src/AddIns/Analysis/CodeQuality/CodeQualityAnalysis.sln index c67ec6b861..4408289165 100644 --- a/src/AddIns/Analysis/CodeQuality/CodeQualityAnalysis.sln +++ b/src/AddIns/Analysis/CodeQuality/CodeQualityAnalysis.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 -# SharpDevelop 4.2.0.7899-alpha +# SharpDevelop 4.2.0.7909-alpha Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeQualityAnalysis", "CodeQualityAnalysis.csproj", "{76DD1CC0-0D86-44A1-9BD6-D91F79807BC3}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "..\..\..\Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" diff --git a/src/AddIns/Analysis/CodeQuality/Src/Controls/MatrixControl.cs b/src/AddIns/Analysis/CodeQuality/Src/Controls/MatrixControl.cs index 7b5d533bad..133f7fcbe2 100644 --- a/src/AddIns/Analysis/CodeQuality/Src/Controls/MatrixControl.cs +++ b/src/AddIns/Analysis/CodeQuality/Src/Controls/MatrixControl.cs @@ -81,8 +81,8 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls { InvalidateVisual(); - HoveredCell.RowIndex = currentCell.X; - HoveredCell.ColumnIndex = currentCell.Y; + HoveredCell.RowIndex = currentCell.Y; + HoveredCell.ColumnIndex = currentCell.X; HoveredCell.Value = matrix[HoveredCell.RowIndex, HoveredCell.ColumnIndex]; if (HoveredCellChanged != null) HoveredCellChanged(this, new HoveredCellEventArgs(HoveredCell)); diff --git a/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml b/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml index fd7f90f7ab..1fd9e2c9d3 100644 --- a/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml +++ b/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml @@ -32,6 +32,7 @@ @@ -45,7 +46,9 @@ + Grid.Column="2" + Loaded="Trees_Loaded" + ScrollViewer.ScrollChanged="TopTree_ScrollChanged"> @@ -57,12 +60,13 @@ ResizeDirection="Rows" HorizontalAlignment="Stretch" Background="LightGray"> - + HorizontalScrollBarVisibility="Visible" + ScrollChanged="ScrollViewer_ScrollChanged"> diff --git a/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml.cs b/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml.cs index fdc0273d61..3e0caa3a9e 100644 --- a/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml.cs +++ b/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml.cs @@ -15,6 +15,7 @@ using System.Windows.Forms; using System.Linq; using ICSharpCode.CodeQualityAnalysis.Utility; + namespace ICSharpCode.CodeQualityAnalysis.Controls { /// @@ -22,6 +23,10 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls /// public partial class TreeMatrixControl : System.Windows.Controls.UserControl { + + private ScrollViewer leftScrollViewer; + private ScrollViewer topScrollViewer; + public Matrix Matrix { get @@ -35,9 +40,11 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls } } + public TreeMatrixControl() { InitializeComponent(); + matrixControl.HoveredCellChanged += OnHoverChanged; } @@ -46,5 +53,48 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls Helper.FillTree (leftTree,module); Helper.FillTree (topTree,module); } + + + void Trees_Loaded (object sender, EventArgs e) + { + leftTree.ApplyTemplate(); + topTree.ApplyTemplate(); + + leftScrollViewer = Helper.FindVisualChild(leftTree); + topScrollViewer = Helper.FindVisualChild(topTree); + } + + void OnHoverChanged (object sender ,HoveredCellEventArgs e) + { + var leftNode = leftTree.Items[e.HoveredCell.RowIndex] as DependecyTreeNode; + leftTree.SelectedItem = leftNode; + leftTree.FocusNode(leftNode); + + var topNode = topTree.Items[e.HoveredCell.ColumnIndex] as DependecyTreeNode; + topTree.SelectedItem = topNode; + topTree.FocusNode(topNode); + } + + + void LeftTree_ScrollChanged(object sender, ScrollChangedEventArgs e) + { +// Console.WriteLine("Left TreeScroll"); + scrollViewer.ScrollToVerticalOffset(e.VerticalOffset * matrixControl.CellHeight); + Console.WriteLine("--"); + } + + void TopTree_ScrollChanged(object sender, ScrollChangedEventArgs e) + { +// Console.WriteLine("Top TreeScroll "); + scrollViewer.ScrollToHorizontalOffset(e.VerticalChange * matrixControl.CellHeight); + Console.WriteLine("--"); + } + + + void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e) + { +// Console.WriteLine("ScrollViewer_ScrollChanged {0} _ {1}",e.VerticalChange,scrollViewer != null); + //leftScrollViewer.ScrollToVerticalOffset (e.VerticalChange * matrixControl.CellHeight); + } } } diff --git a/src/AddIns/Analysis/CodeQuality/Src/Helper.cs b/src/AddIns/Analysis/CodeQuality/Src/Utility/Helper.cs similarity index 67% rename from src/AddIns/Analysis/CodeQuality/Src/Helper.cs rename to src/AddIns/Analysis/CodeQuality/Src/Utility/Helper.cs index 130a9e2a77..ddf7695e4b 100644 --- a/src/AddIns/Analysis/CodeQuality/Src/Helper.cs +++ b/src/AddIns/Analysis/CodeQuality/Src/Utility/Helper.cs @@ -7,6 +7,8 @@ * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; +using System.Windows; +using System.Windows.Media; namespace ICSharpCode.CodeQualityAnalysis { @@ -52,5 +54,33 @@ namespace ICSharpCode.CodeQualityAnalysis DependecyTreeNode dtn = new DependecyTreeNode(node); return dtn; } + + + public static T FindVisualChild( DependencyObject obj ) + where T : DependencyObject + { + // Search immediate children first (breadth-first) + + for( int i = 0; i < VisualTreeHelper.GetChildrenCount( obj ); i++ ) + { + DependencyObject child = VisualTreeHelper.GetChild( obj, i ); + + if( child != null && child is T ) + { + return ( T )child; + } + else + { + T childOfChild = FindVisualChild( child ); + + if( childOfChild != null ) + { + return childOfChild; + } + } + } + + return null; + } } }