#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.
 
 
 
 
 
 

129 lines
3.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.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Controls.Primitives;
namespace ICSharpCode.WpfDesign.Designer.OutlineView
{
public class DragTreeViewItem : TreeViewItem
{
static DragTreeViewItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(DragTreeViewItem),
new FrameworkPropertyMetadata(typeof(DragTreeViewItem)));
}
public DragTreeViewItem()
{
Loaded += new RoutedEventHandler(DragTreeViewItem_Loaded);
Unloaded += new RoutedEventHandler(DragTreeViewItem_Unloaded);
}
void DragTreeViewItem_Loaded(object sender, RoutedEventArgs e)
{
ParentTree = this.GetVisualAncestors().OfType<DragTreeView>().FirstOrDefault();
if (ParentTree != null) {
ParentTree.ItemAttached(this);
}
}
void DragTreeViewItem_Unloaded(object sender, RoutedEventArgs e)
{
if (ParentTree != null) {
ParentTree.ItemDetached(this);
}
ParentTree = null;
}
public new static readonly DependencyProperty IsSelectedProperty =
Selector.IsSelectedProperty.AddOwner(typeof(DragTreeViewItem), new FrameworkPropertyMetadata(OnIsSelectedChanged));
public new bool IsSelected {
get { return (bool)GetValue(IsSelectedProperty); }
set { SetValue(IsSelectedProperty, value); }
}
public static void OnIsSelectedChanged(DependencyObject s, DependencyPropertyChangedEventArgs e)
{
var el = s as FrameworkElement;
if (el != null)
el.BringIntoView();
}
public static readonly DependencyProperty IsDragHoverProperty =
DependencyProperty.Register("IsDragHover", typeof(bool), typeof(DragTreeViewItem));
public bool IsDragHover {
get { return (bool)GetValue(IsDragHoverProperty); }
set { SetValue(IsDragHoverProperty, value); }
}
internal ContentPresenter HeaderPresenter {
get { return (ContentPresenter)Template.FindName("PART_Header", this); }
}
public static readonly DependencyProperty LevelProperty =
DependencyProperty.Register("Level", typeof(int), typeof(DragTreeViewItem));
public int Level {
get { return (int)GetValue(LevelProperty); }
set { SetValue(LevelProperty, value); }
}
public DragTreeView ParentTree { get; private set; }
protected override void OnVisualParentChanged(DependencyObject oldParent)
{
base.OnVisualParentChanged(oldParent);
var parentItem = ItemsControl.ItemsControlFromItemContainer(this) as DragTreeViewItem;
if (parentItem != null) Level = parentItem.Level + 1;
}
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
base.OnPropertyChanged(e);
if (e.Property == IsSelectedProperty) {
if (ParentTree != null) {
ParentTree.ItemIsSelectedChanged(this);
}
}
}
protected override DependencyObject GetContainerForItemOverride()
{
return new DragTreeViewItem();
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is DragTreeViewItem;
}
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
if (e.Source is ToggleButton || e.Source is ItemsPresenter) return;
ParentTree.ItemMouseDown(this);
}
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonUp(e);
ParentTree.ItemMouseUp(this);
}
}
}