Skip to content

Commit 065aec1

Browse files
committed
Added new helper methods.
Simplified code again.
1 parent de6ce7d commit 065aec1

2 files changed

Lines changed: 58 additions & 28 deletions

File tree

ReClass.NET/Nodes/BaseContainerNode.cs

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System.Collections.Generic;
33
using System.Diagnostics.Contracts;
44
using ReClassNET.Extensions;
5-
using ReClassNET.Util;
65

76
namespace ReClassNET.Nodes
87
{
@@ -41,6 +40,55 @@ public int FindNodeIndex(BaseNode node)
4140
return Nodes.FindIndex(n => n == node);
4241
}
4342

43+
/// <summary>
44+
/// Tries to get the predecessor of the given node in the container.
45+
/// </summary>
46+
/// <param name="node">The root node.</param>
47+
/// <param name="predecessor">The predecessor of the given node.</param>
48+
/// <returns>True if a predecessor exists, otherwise false.</returns>
49+
public bool TryGetPredecessor(BaseNode node, out BaseNode predecessor)
50+
{
51+
Contract.Requires(node != null);
52+
53+
return TryGetNeighbour(node, -1, out predecessor);
54+
}
55+
56+
/// <summary>
57+
/// Tries to get the successor of the given node in the container.
58+
/// </summary>
59+
/// <param name="node">The root node.</param>
60+
/// <param name="successor">The successor of the given node.</param>
61+
/// <returns>True if a successor exists, otherwise false.</returns>
62+
public bool TryGetSuccessor(BaseNode node, out BaseNode successor)
63+
{
64+
Contract.Requires(node != null);
65+
66+
return TryGetNeighbour(node, 1, out successor);
67+
}
68+
69+
private bool TryGetNeighbour(BaseNode node, int offset, out BaseNode neighbour)
70+
{
71+
Contract.Requires(node != null);
72+
73+
neighbour = null;
74+
75+
var index = FindNodeIndex(node);
76+
if (index == -1)
77+
{
78+
return false;
79+
}
80+
81+
var neighbourIndex = index + offset;
82+
if (neighbourIndex < 0 || neighbourIndex >= nodes.Count)
83+
{
84+
return false;
85+
}
86+
87+
neighbour = nodes[neighbourIndex];
88+
89+
return true;
90+
}
91+
4492
public bool ReplaceChildNode(BaseNode child, Type nodeType)
4593
{
4694
Contract.Requires(nodeType != null);

ReClass.NET/UI/MemoryViewControl.cs

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -783,33 +783,8 @@ private void selectedNodeContextMenuStrip_Opening(object sender, CancelEventArgs
783783
break;
784784
}
785785

786-
var hiddenNodesExistBelow = false;
787-
var hiddenNodesExistAbove = false;
788-
if (count == 1)
789-
{
790-
if (parentNode != null)
791-
{
792-
var selNodeIndex = parentNode.FindNodeIndex(node);
793-
if (selNodeIndex + 1 < parentNode.Nodes.Count() && parentNode.Nodes.ElementAt(selNodeIndex + 1).IsHidden)
794-
{
795-
hiddenNodesExistBelow = true;
796-
}
797-
if (selNodeIndex - 1 > -1 && parentNode.Nodes.ElementAt(selNodeIndex - 1).IsHidden)
798-
{
799-
hiddenNodesExistAbove = true;
800-
}
801-
}
802-
}
803-
804-
unhideNodesBelowToolStripMenuItem.Enabled = hiddenNodesExistBelow;
805-
unhideNodesAboveToolStripMenuItem.Enabled = hiddenNodesExistAbove;
806-
807-
hideNodesToolStripMenuItem.Enabled = SelectedNodes.All(n => !(n is ClassNode));
808-
809-
unhideChildNodesToolStripMenuItem.Enabled = count == 1 && node is BaseContainerNode bcn && bcn.Nodes.Any(n => n.IsHidden);
810-
811-
addBytesToolStripMenuItem.Enabled = node?.ParentNode != null || nodeIsClass;
812-
insertBytesToolStripMenuItem.Enabled = count == 1 && node?.ParentNode != null;
786+
addBytesToolStripMenuItem.Enabled = parentNode != null || nodeIsClass;
787+
insertBytesToolStripMenuItem.Enabled = count == 1 && parentNode != null;
813788

814789
changeTypeToolStripMenuItem.Enabled = count > 0 && !nodeIsClass;
815790

@@ -824,6 +799,13 @@ private void selectedNodeContextMenuStrip_Opening(object sender, CancelEventArgs
824799

825800
showCodeOfClassToolStripMenuItem.Enabled = nodeIsClass;
826801
shrinkClassToolStripMenuItem.Enabled = nodeIsClass;
802+
803+
unhideNodesAboveToolStripMenuItem.Enabled = count == 1 && parentNode != null && parentNode.TryGetPredecessor(node, out var predecessor) && predecessor.IsHidden;
804+
unhideNodesBelowToolStripMenuItem.Enabled = count == 1 && parentNode != null && parentNode.TryGetSuccessor(node, out var successor) && successor.IsHidden;
805+
806+
hideNodesToolStripMenuItem.Enabled = SelectedNodes.All(n => !(n is ClassNode));
807+
808+
unhideChildNodesToolStripMenuItem.Enabled = count == 1 && node is BaseContainerNode bcn && bcn.Nodes.Any(n => n.IsHidden);
827809
}
828810

829811
private void addBytesToolStripMenuItem_Click(object sender, EventArgs e)

0 commit comments

Comments
 (0)