Browse Source

#1904: Cherry-picked SharpTreeView changes from SharpDevelop repository.

7edf1c4f1 fix focusing bug in SharpTreeView
60b89bb14 Changed behavior for 'Key.Space' in SharpTreeView.cs, instead of 'double click', now it sets 'IsChecked'.
103aff080 Set e.Handled = true in SharpTreeView.OnKeyDown()
c928f88b5 Fix F2/Escape for editable SharpTreeNodes.
6b01d6f55 Fix #354: "+" icon in SharpTreeView is missing right border in 120DPI mode
pull/1968/head
Daniel Grunwald 5 years ago
parent
commit
5ef1a973d3
  1. 13
      SharpTreeView/SharpTreeNode.cs
  2. 2
      SharpTreeView/SharpTreeNodeView.cs
  3. 17
      SharpTreeView/SharpTreeView.cs
  4. 13
      SharpTreeView/SharpTreeViewItem.cs
  5. 2
      SharpTreeView/Themes/Generic.xaml

13
SharpTreeView/SharpTreeNode.cs

@ -335,19 +335,14 @@ namespace ICSharpCode.TreeView @@ -335,19 +335,14 @@ namespace ICSharpCode.TreeView
public IEnumerable<SharpTreeNode> Ancestors()
{
var node = this;
while (node.Parent != null) {
yield return node.Parent;
node = node.Parent;
}
for (SharpTreeNode n = this.Parent; n != null; n = n.Parent)
yield return n;
}
public IEnumerable<SharpTreeNode> AncestorsAndSelf()
{
yield return this;
foreach (var node in Ancestors()) {
yield return node;
}
for (SharpTreeNode n = this; n != null; n = n.Parent)
yield return n;
}
#endregion

2
SharpTreeView/SharpTreeNodeView.cs

@ -147,7 +147,7 @@ namespace ICSharpCode.TreeView @@ -147,7 +147,7 @@ namespace ICSharpCode.TreeView
result -= 19;
}
if (result < 0) {
Debug.WriteLine("SharpTreeNodeView.CalculateIndent() on node without correctly-set level");
Debug.WriteLine("Negative indent level detected for node " + Node);
return 0;
}
return result;

17
SharpTreeView/SharpTreeView.cs

@ -178,7 +178,7 @@ namespace ICSharpCode.TreeView @@ -178,7 +178,7 @@ namespace ICSharpCode.TreeView
{
if (updatesLocked) return;
SetSelectedItems(newSelection ?? Enumerable.Empty<SharpTreeNode>());
if (SelectedItem == null) {
if (SelectedItem == null && this.IsKeyboardFocusWithin) {
// if we removed all selected nodes, then move the focus to the node
// preceding the first of the old selected nodes
SelectedIndex = topSelectedIndex;
@ -265,11 +265,24 @@ namespace ICSharpCode.TreeView @@ -265,11 +265,24 @@ namespace ICSharpCode.TreeView
}
break;
case Key.Return:
case Key.Space:
if (container != null && Keyboard.Modifiers == ModifierKeys.None && this.SelectedItems.Count == 1 && this.SelectedItem == container.Node) {
e.Handled = true;
container.Node.ActivateItem(e);
}
break;
case Key.Space:
if (container != null && Keyboard.Modifiers == ModifierKeys.None && this.SelectedItems.Count == 1 && this.SelectedItem == container.Node) {
e.Handled = true;
if (container.Node.IsCheckable) {
if (container.Node.IsChecked == null) // If partially selected, we want to select everything
container.Node.IsChecked = true;
else
container.Node.IsChecked = !container.Node.IsChecked;
} else {
container.Node.ActivateItem(e);
}
}
break;
case Key.Add:
if (container != null && ItemsControl.ItemsControlFromItemContainer(container) == this) {
container.Node.IsExpanded = true;

13
SharpTreeView/SharpTreeViewItem.cs

@ -29,13 +29,16 @@ namespace ICSharpCode.TreeView @@ -29,13 +29,16 @@ namespace ICSharpCode.TreeView
{
switch (e.Key) {
case Key.F2:
// if (SharpTreeNode.ActiveNodes.Count == 1 && Node.IsEditable) {
// Node.IsEditing = true;
// e.Handled = true;
// }
if (Node.IsEditable && ParentTreeView != null && ParentTreeView.SelectedItems.Count == 1 && ParentTreeView.SelectedItems[0] == Node) {
Node.IsEditing = true;
e.Handled = true;
}
break;
case Key.Escape:
Node.IsEditing = false;
if (Node.IsEditing) {
Node.IsEditing = false;
e.Handled = true;
}
break;
}
}

2
SharpTreeView/Themes/Generic.xaml

@ -237,7 +237,7 @@ @@ -237,7 +237,7 @@
Style="{StaticResource ExpandCollapseToggleStyle}"
IsChecked="{Binding IsExpanded}"
Visibility="Hidden"
Margin="0 0 6 0"
Margin="0 0 7 0"
VerticalAlignment="Center" />
<Border Name="checkBoxContainer"
Width="16"

Loading…
Cancel
Save