Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions ReClass.NET/DataExchange/ReClass/ReClassFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -165,9 +165,10 @@ private IEnumerable<BaseNode> ReadNodeElements(IEnumerable<XElement> elements, C

node.Name = element.Attribute("Name")?.Value ?? string.Empty;
node.Comment = element.Attribute("Comment")?.Value ?? string.Empty;
node.IsHidden = element.Attribute("bHidden")?.Value.Equals("1") ?? false;

// Convert the Custom node into normal hex nodes.
if (node is CustomNode)
// Convert the Custom node into normal hex nodes.
if (node is CustomNode)
{
int.TryParse(element.Attribute("Size")?.Value, out var size);

Expand Down Expand Up @@ -243,7 +244,8 @@ private IEnumerable<BaseNode> ReadNodeElements(IEnumerable<XElement> elements, C
.Select(e => new VMethodNode
{
Name = e.Attribute("Name")?.Value ?? string.Empty,
Comment = e.Attribute("Comment")?.Value ?? string.Empty
Comment = e.Attribute("Comment")?.Value ?? string.Empty,
IsHidden = e.Attribute("bHidden")?.Value.Equals("1") ?? false
})
.ForEach(vtableNode.AddNode);
break;
Expand Down
3 changes: 2 additions & 1 deletion ReClass.NET/DataExchange/ReClass/ReClassNetFile.Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ public partial class ReClassNetFile
public const string XmlUuidAttribute = "uuid";
public const string XmlNameAttribute = "name";
public const string XmlCommentAttribute = "comment";
public const string XmlAddressAttribute = "address";
public const string XmlHiddenAttribute = "hidden";
public const string XmlAddressAttribute = "address";
public const string XmlTypeAttribute = "type";
public const string XmlReferenceAttribute = "reference";
public const string XmlCountAttribute = "count";
Expand Down
4 changes: 3 additions & 1 deletion ReClass.NET/DataExchange/ReClass/ReClassNetFile.Read.cs
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ private IEnumerable<BaseNode> ReadNodeElements(IEnumerable<XElement> elements, C

node.Name = element.Attribute(XmlNameAttribute)?.Value ?? string.Empty;
node.Comment = element.Attribute(XmlCommentAttribute)?.Value ?? string.Empty;
node.IsHidden = element.Attribute(XmlHiddenAttribute)?.Value.Equals("True") ?? false;

if (node is BaseReferenceNode referenceNode)
{
Expand Down Expand Up @@ -164,7 +165,8 @@ private IEnumerable<BaseNode> ReadNodeElements(IEnumerable<XElement> elements, C
.Select(e => new VMethodNode
{
Name = e.Attribute(XmlNameAttribute)?.Value ?? string.Empty,
Comment = e.Attribute(XmlCommentAttribute)?.Value ?? string.Empty
Comment = e.Attribute(XmlCommentAttribute)?.Value ?? string.Empty,
IsHidden = e.Attribute(XmlHiddenAttribute)?.Value.Equals("True") ?? false
})
.ForEach(vtableNode.AddNode);
break;
Expand Down
4 changes: 3 additions & 1 deletion ReClass.NET/DataExchange/ReClass/ReClassNetFile.Write.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ private static IEnumerable<XElement> CreateNodeElements(IEnumerable<BaseNode> no
XmlNodeElement,
new XAttribute(XmlNameAttribute, node.Name ?? string.Empty),
new XAttribute(XmlCommentAttribute, node.Comment ?? string.Empty),
new XAttribute(XmlHiddenAttribute, node.IsHidden.ToString()),
new XAttribute(XmlTypeAttribute, typeString)
);

Expand All @@ -104,7 +105,8 @@ private static IEnumerable<XElement> CreateNodeElements(IEnumerable<BaseNode> no
element.Add(vtableNode.Nodes.Select(n => new XElement(
XmlMethodElement,
new XAttribute(XmlNameAttribute, n.Name ?? string.Empty),
new XAttribute(XmlCommentAttribute, n.Comment ?? string.Empty)
new XAttribute(XmlCommentAttribute, n.Comment ?? string.Empty),
new XAttribute(XmlHiddenAttribute, n.IsHidden.ToString())
)));
break;
}
Expand Down
4 changes: 2 additions & 2 deletions ReClass.NET/Nodes/BaseNode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public abstract class BaseNode
internal static readonly List<INodeInfoReader> NodeInfoReader = new List<INodeInfoReader>();

protected static readonly int TextPadding = Icons.Dimensions;
protected static readonly int HiddenHeight = 1;
protected static readonly int HiddenHeight = 0;

private static int nodeIndex = 0;

Expand All @@ -41,7 +41,7 @@ public abstract class BaseNode
public BaseContainerNode ParentNode { get; internal set; }

/// <summary>Gets or sets a value indicating whether this object is hidden.</summary>
public bool IsHidden { get; protected set; }
public bool IsHidden { get; set; }

/// <summary>Gets or sets a value indicating whether this object is selected.</summary>
public bool IsSelected { get; set; }
Expand Down
46 changes: 45 additions & 1 deletion ReClass.NET/UI/MemoryViewControl.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

151 changes: 151 additions & 0 deletions ReClass.NET/UI/MemoryViewControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,7 @@ protected override void OnMouseClick(MouseEventArgs e)
continue;
}

if (hotSpot.Node is BaseContainerNode) continue;
var first = Utils.Min(selectedNodes[0], hotSpot, h => h.Node.Offset.ToInt32());
var last = first == hotSpot ? selectedNodes[0] : hotSpot;

Expand Down Expand Up @@ -777,6 +778,45 @@ private void selectedNodeContextMenuStrip_Opening(object sender, CancelEventArgs
break;
}

var hiddenNodesExistBelow = false;
var hiddenNodesExistAbove = false;
if (count == 1)
{
var selNode = SelectedNodes.ElementAt(0);
var parNode = SelectedNodes.ElementAt(0).ParentNode;
if (parNode != null)
{
var selNodeIndex = parNode.FindNodeIndex(selNode);
if ((selNodeIndex+1 < parNode.Nodes.Count()) && (parNode.Nodes.ElementAt(selNodeIndex + 1).IsHidden == true))
{
hiddenNodesExistBelow = true;
}
if ((selNodeIndex - 1 > -1) && (parNode.Nodes.ElementAt(selNodeIndex - 1).IsHidden == true))
{
hiddenNodesExistAbove = true;
}
}
}

unhideNodesBelowToolStripMenuItem.Enabled = hiddenNodesExistBelow;
unhideNodesAboveToolStripMenuItem.Enabled = hiddenNodesExistAbove;


var areNodesHideable = true;
foreach (BaseNode bs in SelectedNodes) areNodesHideable = areNodesHideable & !(bs is ClassNode);
hideNodesToolStripMenuItem.Enabled = areNodesHideable;

var parentNodeTypeSelected = false;
var areChildNodesHidden = false;
if ((count == 1) && (SelectedNodes.ElementAt(0) is BaseContainerNode))
{
var selbcn = (BaseContainerNode)SelectedNodes.ElementAt(0);
parentNodeTypeSelected = true;
foreach (BaseNode bn in selbcn.Nodes) areChildNodesHidden = areChildNodesHidden | bn.IsHidden;
}
unhideChildNodesToolStripMenuItem.Enabled = parentNodeTypeSelected & areChildNodesHidden;


addBytesToolStripMenuItem.Enabled = node?.ParentNode != null || nodeIsClass;
insertBytesToolStripMenuItem.Enabled = count == 1 && node?.ParentNode != null;

Expand Down Expand Up @@ -940,6 +980,26 @@ private void pasteNodesToolStripMenuItem_Click(object sender, EventArgs e)
PasteNodeFromClipboardToSelection();
}

private void hideNodesToolStripMenuItem_Click(object sender, EventArgs e)
{
HideSelectedNodes();
}

private void unhideNodesBelowToolStripMenuItem_Click(object sender, EventArgs e)
{
UnhideNodesBelow();
}

private void unhideNodesAboveToolStripMenuItem_Click(object sender, EventArgs e)
{
UnhideNodesAbove();
}

private void unhideChildNodesToolStripMenuItem_Click(object sender, EventArgs e)
{
UnhideChildNodes();
}

private void removeToolStripMenuItem_Click(object sender, EventArgs e)
{
RemoveSelectedNodes();
Expand Down Expand Up @@ -1162,6 +1222,97 @@ private void RemoveSelectedNodes()
Invalidate();
}

private void HideSelectedNodes()
{
foreach (HotSpot hs in selectedNodes) hs.Node.IsHidden = true;

selectedNodes.Clear();

OnSelectionChanged();

Invalidate();
}

private void UnhideChildNodes()
{
BaseContainerNode bcn = (BaseContainerNode) selectedNodes[0].Node;
foreach (BaseNode bn in bcn.Nodes)
{
bn.IsHidden = false;
bn.IsSelected = false;
}

selectedNodes[0].Node.IsSelected = false;

selectedNodes.Clear();

OnSelectionChanged();

Invalidate();
}

private void UnhideNodesBelow()
{
var selNode = selectedNodes[0].Node;
var parNode = selNode.ParentNode;

if (parNode == null) return;

var hiddenNodeStartIndex = parNode.FindNodeIndex(selNode) + 1;

if (hiddenNodeStartIndex >= parNode.Nodes.Count()) return;

for (int i = hiddenNodeStartIndex; i < parNode.Nodes.Count(); i++)
{
var indexNode = parNode.Nodes.ElementAt(i);
if (indexNode.IsHidden)
{
indexNode.IsHidden = false;
indexNode.IsSelected = false;
}
else break;
}

selNode.IsSelected = false;

selectedNodes.Clear();

OnSelectionChanged();

Invalidate();
}

private void UnhideNodesAbove()
{
var selNode = selectedNodes[0].Node;
var parNode = selNode.ParentNode;

if (parNode == null) return;

var hiddenNodeStartIndex = parNode.FindNodeIndex(selNode) - 1;

if (hiddenNodeStartIndex < 0) return;

for (int i = hiddenNodeStartIndex; i > -1; i--)
{
var indexNode = parNode.Nodes.ElementAt(i);
if (indexNode.IsHidden)
{
indexNode.IsHidden = false;
indexNode.IsSelected = false;
}
else break;
}

selNode.IsSelected = false;

selectedNodes.Clear();

OnSelectionChanged();

Invalidate();
}

private void CopySelectedNodesToClipboard()
{
if (selectedNodes.Count > 0)
Expand Down