#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

172 lines
4.7 KiB

// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading;
using ICSharpCode.CodeQualityAnalysis.Utility;
using ICSharpCode.TreeView;
namespace ICSharpCode.CodeQualityAnalysis.Controls
{
/// <summary>
/// Interaction logic for TreeMatrixControl.xaml
/// </summary>
public partial class TreeMatrixControl : System.Windows.Controls.UserControl
{
private ScrollViewer leftScrollViewer;
private ScrollViewer topScrollViewer;
public DependencyMatrix Matrix
{
get
{
return (DependencyMatrix) matrixControl.Matrix;
}
set
{
matrixControl.Matrix = value;
}
}
public TreeMatrixControl()
{
InitializeComponent();
matrixControl.Colorizer = new DependencyColorizer();
matrixControl.HoveredCellChanged += OnHoverChanged;
}
public void DrawTree(Module module)
{
var leftCol = leftTree.Items.SourceCollection as INotifyCollectionChanged;
leftCol.CollectionChanged += BuildLeftINodeList;
Helper.FillTree(leftTree, module);
leftTree.MouseMove += (s,e)=>
{
var c = Helper.GetParent<SharpTreeViewItem>(e.OriginalSource as DependencyObject);
if (c != null){
};
var topCol = topTree.Items.SourceCollection as INotifyCollectionChanged;
topCol.CollectionChanged += BuildTopINodeList;
Helper.FillTree(topTree, module);
}
void Trees_Loaded (object sender, EventArgs e)
{
leftTree.ApplyTemplate();
topTree.ApplyTemplate();
leftScrollViewer = Helper.FindVisualChild<ScrollViewer>(leftTree);
topScrollViewer = Helper.FindVisualChild<ScrollViewer>(topTree);
}
#region Update MatricControl
bool rebuildLeftNodeListRequested;
void BuildLeftINodeList(object sender,NotifyCollectionChangedEventArgs e)
{
if (rebuildLeftNodeListRequested)
return;
rebuildLeftNodeListRequested = true;
Dispatcher.BeginInvoke(
DispatcherPriority.DataBind,
new Action(SetVisibleItemsForRows));
}
void SetVisibleItemsForRows()
{
List<INode> leftNodes = new List<INode>();
foreach (DependecyTreeNode element in leftTree.Items) {
var n = element.INode;
leftNodes.Add(n);
}
rebuildLeftNodeListRequested = false;
matrixControl.SetVisibleItems(HeaderType.Rows, leftNodes);
}
bool rebuildTopNodeListRequested;
void BuildTopINodeList(object sender,NotifyCollectionChangedEventArgs e)
{
if (rebuildTopNodeListRequested)
return;
rebuildTopNodeListRequested = true;
Dispatcher.BeginInvoke(
DispatcherPriority.DataBind,
new Action(SetVisibleItemsForColumns));
}
void SetVisibleItemsForColumns()
{
List<INode> topNodes = new List<INode>();
foreach (DependecyTreeNode element in topTree.Items) {
var n = element.INode;
topNodes.Add(n);
}
rebuildTopNodeListRequested = false;
matrixControl.SetVisibleItems(HeaderType.Columns, topNodes);
}
#endregion
void OnHoverChanged(object sender ,HoveredCellEventArgs <Relationship> 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);
}
}
void LeftTree_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
Console.WriteLine("Left TreeScroll {0} - {1}",e.VerticalOffset * matrixControl.CellHeight,leftTree.Items.Count);
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);
}
}
}