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
public IEnumerable<SharpTreeNode> Ancestors() public IEnumerable<SharpTreeNode> Ancestors()
{ {
var node = this; for (SharpTreeNode n = this.Parent; n != null; n = n.Parent)
while (node.Parent != null) { yield return n;
yield return node.Parent;
node = node.Parent;
}
} }
public IEnumerable<SharpTreeNode> AncestorsAndSelf() public IEnumerable<SharpTreeNode> AncestorsAndSelf()
{ {
yield return this; for (SharpTreeNode n = this; n != null; n = n.Parent)
foreach (var node in Ancestors()) { yield return n;
yield return node;
}
} }
#endregion #endregion

2
SharpTreeView/SharpTreeNodeView.cs

@ -147,7 +147,7 @@ namespace ICSharpCode.TreeView
result -= 19; result -= 19;
} }
if (result < 0) { 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 0;
} }
return result; return result;

17
SharpTreeView/SharpTreeView.cs

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

13
SharpTreeView/SharpTreeViewItem.cs

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

2
SharpTreeView/Themes/Generic.xaml

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

Loading…
Cancel
Save