Skip to content

Commit c6e2891

Browse files
author
70rmund
committed
Added Hidden Nodes Feature to Reclass.NET
1 parent 86281f6 commit c6e2891

7 files changed

Lines changed: 205 additions & 9 deletions

File tree

‎ReClass.NET/DataExchange/ReClass/ReClassFile.cs‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,10 @@ private IEnumerable<BaseNode> ReadNodeElements(IEnumerable<XElement> elements, C
165165

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

169-
// Convert the Custom node into normal hex nodes.
170-
if (node is CustomNode)
170+
// Convert the Custom node into normal hex nodes.
171+
if (node is CustomNode)
171172
{
172173
int.TryParse(element.Attribute("Size")?.Value, out var size);
173174

@@ -243,7 +244,8 @@ private IEnumerable<BaseNode> ReadNodeElements(IEnumerable<XElement> elements, C
243244
.Select(e => new VMethodNode
244245
{
245246
Name = e.Attribute("Name")?.Value ?? string.Empty,
246-
Comment = e.Attribute("Comment")?.Value ?? string.Empty
247+
Comment = e.Attribute("Comment")?.Value ?? string.Empty,
248+
IsHidden = e.Attribute("bHidden")?.Value.Equals("1") ?? false
247249
})
248250
.ForEach(vtableNode.AddNode);
249251
break;

‎ReClass.NET/DataExchange/ReClass/ReClassNetFile.Constants.cs‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ public partial class ReClassNetFile
2323
public const string XmlUuidAttribute = "uuid";
2424
public const string XmlNameAttribute = "name";
2525
public const string XmlCommentAttribute = "comment";
26-
public const string XmlAddressAttribute = "address";
26+
public const string XmlHiddenAttribute = "hidden";
27+
public const string XmlAddressAttribute = "address";
2728
public const string XmlTypeAttribute = "type";
2829
public const string XmlReferenceAttribute = "reference";
2930
public const string XmlCountAttribute = "count";

‎ReClass.NET/DataExchange/ReClass/ReClassNetFile.Read.cs‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ private IEnumerable<BaseNode> ReadNodeElements(IEnumerable<XElement> elements, C
132132

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

136137
if (node is BaseReferenceNode referenceNode)
137138
{
@@ -164,7 +165,8 @@ private IEnumerable<BaseNode> ReadNodeElements(IEnumerable<XElement> elements, C
164165
.Select(e => new VMethodNode
165166
{
166167
Name = e.Attribute(XmlNameAttribute)?.Value ?? string.Empty,
167-
Comment = e.Attribute(XmlCommentAttribute)?.Value ?? string.Empty
168+
Comment = e.Attribute(XmlCommentAttribute)?.Value ?? string.Empty,
169+
IsHidden = e.Attribute(XmlHiddenAttribute)?.Value.Equals("True") ?? false
168170
})
169171
.ForEach(vtableNode.AddNode);
170172
break;

‎ReClass.NET/DataExchange/ReClass/ReClassNetFile.Write.cs‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ private static IEnumerable<XElement> CreateNodeElements(IEnumerable<BaseNode> no
8989
XmlNodeElement,
9090
new XAttribute(XmlNameAttribute, node.Name ?? string.Empty),
9191
new XAttribute(XmlCommentAttribute, node.Comment ?? string.Empty),
92+
new XAttribute(XmlHiddenAttribute, node.IsHidden.ToString()),
9293
new XAttribute(XmlTypeAttribute, typeString)
9394
);
9495

@@ -104,7 +105,8 @@ private static IEnumerable<XElement> CreateNodeElements(IEnumerable<BaseNode> no
104105
element.Add(vtableNode.Nodes.Select(n => new XElement(
105106
XmlMethodElement,
106107
new XAttribute(XmlNameAttribute, n.Name ?? string.Empty),
107-
new XAttribute(XmlCommentAttribute, n.Comment ?? string.Empty)
108+
new XAttribute(XmlCommentAttribute, n.Comment ?? string.Empty),
109+
new XAttribute(XmlHiddenAttribute, n.IsHidden.ToString())
108110
)));
109111
break;
110112
}

‎ReClass.NET/Nodes/BaseNode.cs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public abstract class BaseNode
2121
internal static readonly List<INodeInfoReader> NodeInfoReader = new List<INodeInfoReader>();
2222

2323
protected static readonly int TextPadding = Icons.Dimensions;
24-
protected static readonly int HiddenHeight = 1;
24+
protected static readonly int HiddenHeight = 0;
2525

2626
private static int nodeIndex = 0;
2727

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

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

4646
/// <summary>Gets or sets a value indicating whether this object is selected.</summary>
4747
public bool IsSelected { get; set; }

‎ReClass.NET/UI/MemoryViewControl.Designer.cs‎

Lines changed: 45 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎ReClass.NET/UI/MemoryViewControl.cs‎

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ protected override void OnMouseClick(MouseEventArgs e)
316316
continue;
317317
}
318318

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

@@ -777,6 +778,39 @@ private void selectedNodeContextMenuStrip_Opening(object sender, CancelEventArgs
777778
break;
778779
}
779780

781+
var hiddenNodesExistBelow = false;
782+
var hiddenNodesExistAbove = false;
783+
if (count == 1)
784+
{
785+
var selNode = SelectedNodes.ElementAt(0);
786+
var parNode = SelectedNodes.ElementAt(0).ParentNode;
787+
if (parNode != null)
788+
{
789+
var selNodeIndex = parNode.FindNodeIndex(selNode);
790+
if ((selNodeIndex+1 < parNode.Nodes.Count()) && (parNode.Nodes.ElementAt(selNodeIndex + 1).IsHidden == true))
791+
{
792+
hiddenNodesExistBelow = true;
793+
}
794+
if ((selNodeIndex - 1 > -1) && (parNode.Nodes.ElementAt(selNodeIndex - 1).IsHidden == true))
795+
{
796+
hiddenNodesExistAbove = true;
797+
}
798+
}
799+
}
800+
801+
unhideNodesBelowToolStripMenuItem.Enabled = hiddenNodesExistBelow;
802+
unhideNodesAboveToolStripMenuItem.Enabled = hiddenNodesExistAbove;
803+
804+
805+
var areNodesHideable = true;
806+
foreach (BaseNode bs in SelectedNodes) areNodesHideable = areNodesHideable & !(bs is ClassNode);
807+
hideNodesToolStripMenuItem.Enabled = areNodesHideable;
808+
809+
var parentNodeTypeSelected = false;
810+
if ((count == 1) && (SelectedNodes.ElementAt(0) is BaseContainerNode)) parentNodeTypeSelected = true;
811+
unhideChildNodesToolStripMenuItem.Enabled = parentNodeTypeSelected;
812+
813+
780814
addBytesToolStripMenuItem.Enabled = node?.ParentNode != null || nodeIsClass;
781815
insertBytesToolStripMenuItem.Enabled = count == 1 && node?.ParentNode != null;
782816

@@ -940,6 +974,26 @@ private void pasteNodesToolStripMenuItem_Click(object sender, EventArgs e)
940974
PasteNodeFromClipboardToSelection();
941975
}
942976

977+
private void hideNodesToolStripMenuItem_Click(object sender, EventArgs e)
978+
{
979+
HideSelectedNodes();
980+
}
981+
982+
private void unhideNodesBelowToolStripMenuItem_Click(object sender, EventArgs e)
983+
{
984+
UnhideNodesBelow();
985+
}
986+
987+
private void unhideNodesAboveToolStripMenuItem_Click(object sender, EventArgs e)
988+
{
989+
UnhideNodesAbove();
990+
}
991+
992+
private void unhideChildNodesToolStripMenuItem_Click(object sender, EventArgs e)
993+
{
994+
UnhideChildNodes();
995+
}
996+
943997
private void removeToolStripMenuItem_Click(object sender, EventArgs e)
944998
{
945999
RemoveSelectedNodes();
@@ -1162,6 +1216,97 @@ private void RemoveSelectedNodes()
11621216
Invalidate();
11631217
}
11641218

1219+
private void HideSelectedNodes()
1220+
{
1221+
foreach (HotSpot hs in selectedNodes) hs.Node.IsHidden = true;
1222+
1223+
selectedNodes.Clear();
1224+
1225+
OnSelectionChanged();
1226+
1227+
Invalidate();
1228+
}
1229+
1230+
private void UnhideChildNodes()
1231+
{
1232+
BaseContainerNode bcn = (BaseContainerNode) selectedNodes[0].Node;
1233+
foreach (BaseNode bn in bcn.Nodes)
1234+
{
1235+
bn.IsHidden = false;
1236+
bn.IsSelected = false;
1237+
}
1238+
1239+
selectedNodes[0].Node.IsSelected = false;
1240+
1241+
selectedNodes.Clear();
1242+
1243+
OnSelectionChanged();
1244+
1245+
Invalidate();
1246+
}
1247+
1248+
private void UnhideNodesBelow()
1249+
{
1250+
var selNode = selectedNodes[0].Node;
1251+
var parNode = selNode.ParentNode;
1252+
1253+
if (parNode == null) return;
1254+
1255+
var hiddenNodeStartIndex = parNode.FindNodeIndex(selNode) + 1;
1256+
1257+
if (hiddenNodeStartIndex >= parNode.Nodes.Count()) return;
1258+
1259+
for (int i = hiddenNodeStartIndex; i < parNode.Nodes.Count(); i++)
1260+
{
1261+
var indexNode = parNode.Nodes.ElementAt(i);
1262+
if (indexNode.IsHidden)
1263+
{
1264+
indexNode.IsHidden = false;
1265+
indexNode.IsSelected = false;
1266+
}
1267+
else break;
1268+
}
1269+
1270+
selNode.IsSelected = false;
1271+
1272+
selectedNodes.Clear();
1273+
1274+
OnSelectionChanged();
1275+
1276+
Invalidate();
1277+
}
1278+
1279+
private void UnhideNodesAbove()
1280+
{
1281+
var selNode = selectedNodes[0].Node;
1282+
var parNode = selNode.ParentNode;
1283+
1284+
if (parNode == null) return;
1285+
1286+
var hiddenNodeStartIndex = parNode.FindNodeIndex(selNode) - 1;
1287+
1288+
if (hiddenNodeStartIndex < 0) return;
1289+
1290+
for (int i = hiddenNodeStartIndex; i > -1; i--)
1291+
{
1292+
var indexNode = parNode.Nodes.ElementAt(i);
1293+
if (indexNode.IsHidden)
1294+
{
1295+
indexNode.IsHidden = false;
1296+
indexNode.IsSelected = false;
1297+
}
1298+
else break;
1299+
}
1300+
1301+
selNode.IsSelected = false;
1302+
1303+
selectedNodes.Clear();
1304+
1305+
OnSelectionChanged();
1306+
1307+
Invalidate();
1308+
}
1309+
11651310
private void CopySelectedNodesToClipboard()
11661311
{
11671312
if (selectedNodes.Count > 0)

0 commit comments

Comments
 (0)