From 241cb1aaca26829f3d25beed6bd1b6570a16e87c Mon Sep 17 00:00:00 2001 From: PeterForstmeier Date: Sun, 4 Sep 2011 20:49:10 +0200 Subject: [PATCH] Scrolling in TreeMatrixControl --- .../Src/Controls/TreeMatrixControl.xaml.cs | 41 +++++++++++-------- .../CodeQuality/Src/MainWindow.xaml.cs | 3 +- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml.cs b/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml.cs index fe80ac79e9..e6b5890f4a 100644 --- a/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml.cs +++ b/src/AddIns/Analysis/CodeQuality/Src/Controls/TreeMatrixControl.xaml.cs @@ -50,7 +50,6 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls InitializeComponent(); matrixControl.Colorizer = new DependencyColorizer(); matrixControl.HoveredCellChanged += OnHoverChanged; - } @@ -59,15 +58,13 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls var leftCol = leftTree.Items.SourceCollection as INotifyCollectionChanged; leftCol.CollectionChanged += BuildLeftINodeList; - Helper.FillTree(leftTree, module); + var topCol = topTree.Items.SourceCollection as INotifyCollectionChanged; + topCol.CollectionChanged += BuildTopINodeList; leftTree.MouseMove += LeftTree_MouseMove; - topTree.MouseMove += TopTree_MouseMove; - var topCol = topTree.Items.SourceCollection as INotifyCollectionChanged; - - topCol.CollectionChanged += BuildTopINodeList; + Helper.FillTree(leftTree, module); Helper.FillTree(topTree, module); } @@ -89,7 +86,6 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls if (n != null) { matrixControl.HighlightLine(HeaderType.Rows,n.INode); leftTree.SelectedItem = n; - leftTree.FocusNode(n); } } @@ -99,7 +95,6 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls if (n != null) { matrixControl.HighlightLine(HeaderType.Columns,n.INode); topTree.SelectedItem = n; - topTree.FocusNode(n); } } @@ -163,42 +158,54 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls #endregion + #region OnHoover void OnHoverChanged(object sender ,HoveredCellEventArgs e) { if (e.HoveredCell.RowIndex < leftTree.Items.Count) { var leftNode = leftTree.Items[e.HoveredCell.RowIndex] as DependecyTreeNode; leftTree.SelectedItem = leftNode; - leftTree.FocusNode(leftNode); } if (e.HoveredCell.ColumnIndex < topTree.Items.Count ) { var topNode = topTree.Items[e.HoveredCell.ColumnIndex] as DependecyTreeNode; topTree.SelectedItem = topNode; - topTree.FocusNode(topNode); } } + #endregion + + #region Tree Scroll + bool scrollerWorking; void LeftTree_ScrollChanged(object sender, ScrollChangedEventArgs e) { - Console.WriteLine("Left TreeScroll {0} - {1}",e.VerticalOffset * matrixControl.CellHeight,leftTree.Items.Count); + scrollerWorking = true; scrollViewer.ScrollToVerticalOffset(e.VerticalOffset * matrixControl.CellHeight); - Console.WriteLine("--"); + scrollerWorking = false; } void TopTree_ScrollChanged(object sender, ScrollChangedEventArgs e) { -// Console.WriteLine("Top TreeScroll "); -// scrollViewer.ScrollToHorizontalOffset(e.VerticalChange * matrixControl.CellHeight); -// Console.WriteLine("--"); + scrollerWorking = true; + scrollViewer.ScrollToHorizontalOffset(e.VerticalOffset * matrixControl.CellWidth); + scrollerWorking = false; } + #endregion + + #region ScrollViewer Scroll void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e) { -// Console.WriteLine("ScrollViewer_ScrollChanged {0} _ {1}",e.VerticalChange,scrollViewer != null); - //leftScrollViewer.ScrollToVerticalOffset (e.VerticalChange * matrixControl.CellHeight); + if (scrollerWorking) { + return; + } + leftScrollViewer.ScrollToVerticalOffset (e.VerticalOffset / matrixControl.CellHeight); + topScrollViewer.ScrollToVerticalOffset (e.HorizontalOffset / matrixControl.CellWidth); } + + #endregion + } } diff --git a/src/AddIns/Analysis/CodeQuality/Src/MainWindow.xaml.cs b/src/AddIns/Analysis/CodeQuality/Src/MainWindow.xaml.cs index 940b3c98c1..23c09fc837 100644 --- a/src/AddIns/Analysis/CodeQuality/Src/MainWindow.xaml.cs +++ b/src/AddIns/Analysis/CodeQuality/Src/MainWindow.xaml.cs @@ -131,9 +131,10 @@ namespace ICSharpCode.CodeQualityAnalysis private void definitionTree_SelectedItemChanged(object sender, SelectionChangedEventArgs e) { - var item = definitionTree.SelectedItem as DependecyTreeNode; + var item = e.AddedItems[0] as DependecyTreeNode; if (item != null && item.INode.Dependency != null) { + definitionTree.SelectedItem = item; var graph = item.INode.Dependency.BuildDependencyGraph(); graphLayout.ChangeGraph(graph); }