[GUI] Improve de-selection in Scene Hierarchy tab

- improved de-selection perfomance
- selected objects count is now displayed in the status bar
- "Select none" renamed to "Clear selection"
This commit is contained in:
VaDiM 2023-04-26 09:54:06 +03:00
parent 4bae98813b
commit 2d81007556
3 changed files with 59 additions and 26 deletions

View File

@ -121,10 +121,10 @@
this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components); this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.selectNoneToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.clearSelectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
this.collapseAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.expandAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.expandAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.collapseAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.timer = new System.Windows.Forms.Timer(this.components); this.timer = new System.Windows.Forms.Timer(this.components);
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
@ -1046,7 +1046,7 @@
// //
this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.selectAllToolStripMenuItem, this.selectAllToolStripMenuItem,
this.selectNoneToolStripMenuItem, this.clearSelectionToolStripMenuItem,
this.toolStripSeparator5, this.toolStripSeparator5,
this.expandAllToolStripMenuItem, this.expandAllToolStripMenuItem,
this.collapseAllToolStripMenuItem}); this.collapseAllToolStripMenuItem});
@ -1060,25 +1060,18 @@
this.selectAllToolStripMenuItem.Text = "Select all"; this.selectAllToolStripMenuItem.Text = "Select all";
this.selectAllToolStripMenuItem.Click += new System.EventHandler(this.selectAllToolStripMenuItem_Click); this.selectAllToolStripMenuItem.Click += new System.EventHandler(this.selectAllToolStripMenuItem_Click);
// //
// selectNoneToolStripMenuItem // clearSelectionToolStripMenuItem
// //
this.selectNoneToolStripMenuItem.Name = "selectNoneToolStripMenuItem"; this.clearSelectionToolStripMenuItem.Name = "clearSelectionToolStripMenuItem";
this.selectNoneToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.clearSelectionToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.selectNoneToolStripMenuItem.Text = "Select none"; this.clearSelectionToolStripMenuItem.Text = "Clear selection";
this.selectNoneToolStripMenuItem.Click += new System.EventHandler(this.selectNoneToolStripMenuItem_Click); this.clearSelectionToolStripMenuItem.Click += new System.EventHandler(this.clearSelectionToolStripMenuItem_Click);
// //
// toolStripSeparator5 // toolStripSeparator5
// //
this.toolStripSeparator5.Name = "toolStripSeparator5"; this.toolStripSeparator5.Name = "toolStripSeparator5";
this.toolStripSeparator5.Size = new System.Drawing.Size(177, 6); this.toolStripSeparator5.Size = new System.Drawing.Size(177, 6);
// //
// collapseAllToolStripMenuItem
//
this.collapseAllToolStripMenuItem.Name = "collapseAllToolStripMenuItem";
this.collapseAllToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.collapseAllToolStripMenuItem.Text = "Collapse all";
this.collapseAllToolStripMenuItem.Click += new System.EventHandler(this.collapseAllToolStripMenuItem_Click);
//
// expandAllToolStripMenuItem // expandAllToolStripMenuItem
// //
this.expandAllToolStripMenuItem.Name = "expandAllToolStripMenuItem"; this.expandAllToolStripMenuItem.Name = "expandAllToolStripMenuItem";
@ -1086,6 +1079,13 @@
this.expandAllToolStripMenuItem.Text = "Expand all"; this.expandAllToolStripMenuItem.Text = "Expand all";
this.expandAllToolStripMenuItem.Click += new System.EventHandler(this.expandAllToolStripMenuItem_Click); this.expandAllToolStripMenuItem.Click += new System.EventHandler(this.expandAllToolStripMenuItem_Click);
// //
// collapseAllToolStripMenuItem
//
this.collapseAllToolStripMenuItem.Name = "collapseAllToolStripMenuItem";
this.collapseAllToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.collapseAllToolStripMenuItem.Text = "Collapse all";
this.collapseAllToolStripMenuItem.Click += new System.EventHandler(this.collapseAllToolStripMenuItem_Click);
//
// timer // timer
// //
this.timer.Interval = 10; this.timer.Interval = 10;
@ -1307,7 +1307,7 @@
private System.Windows.Forms.CheckBox filterExcludeMode; private System.Windows.Forms.CheckBox filterExcludeMode;
private System.Windows.Forms.ContextMenuStrip contextMenuStrip2; private System.Windows.Forms.ContextMenuStrip contextMenuStrip2;
private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem selectNoneToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem clearSelectionToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
private System.Windows.Forms.ToolStripMenuItem collapseAllToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem collapseAllToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem expandAllToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem expandAllToolStripMenuItem;

View File

@ -95,6 +95,11 @@ namespace AssetStudioGUI
private int nextGObject; private int nextGObject;
private List<TreeNode> treeSrcResults = new List<TreeNode>(); private List<TreeNode> treeSrcResults = new List<TreeNode>();
//tree selection
private List<TreeNode> treeNodeSelectedList = new List<TreeNode>();
private bool treeRecursionEnabled = true;
private bool isRecursionEvent = false;
private string openDirectoryBackup = string.Empty; private string openDirectoryBackup = string.Empty;
private string saveDirectoryBackup = string.Empty; private string saveDirectoryBackup = string.Empty;
@ -571,10 +576,38 @@ namespace AssetStudioGUI
private void sceneTreeView_AfterCheck(object sender, TreeViewEventArgs e) private void sceneTreeView_AfterCheck(object sender, TreeViewEventArgs e)
{ {
if (!treeRecursionEnabled)
return;
if (!isRecursionEvent)
{
if (e.Node.Checked)
{
treeNodeSelectedList.Add(e.Node);
}
else
{
treeNodeSelectedList.Remove(e.Node);
}
}
foreach (TreeNode childNode in e.Node.Nodes) foreach (TreeNode childNode in e.Node.Nodes)
{ {
isRecursionEvent = true;
bool wasChecked = childNode.Checked;
childNode.Checked = e.Node.Checked; childNode.Checked = e.Node.Checked;
if (!wasChecked && childNode.Checked)
{
treeNodeSelectedList.Add(childNode);
}
else if (!childNode.Checked)
{
treeNodeSelectedList.Remove(childNode);
}
} }
isRecursionEvent = false;
StatusStripUpdate($"Selected {treeNodeSelectedList.Count} object(s).");
} }
private void listSearch_Enter(object sender, EventArgs e) private void listSearch_Enter(object sender, EventArgs e)
@ -1738,22 +1771,22 @@ namespace AssetStudioGUI
private void selectAllToolStripMenuItem_Click(object sender, EventArgs e) private void selectAllToolStripMenuItem_Click(object sender, EventArgs e)
{ {
sceneTreeView.BeginUpdate();
foreach (TreeNode node in sceneTreeView.Nodes) foreach (TreeNode node in sceneTreeView.Nodes)
{ {
node.Checked = true; node.Checked = true;
} }
sceneTreeView.EndUpdate();
} }
private void selectNoneToolStripMenuItem_Click(object sender, EventArgs e) private void clearSelectionToolStripMenuItem_Click(object sender, EventArgs e)
{ {
sceneTreeView.BeginUpdate(); treeRecursionEnabled = false;
foreach (TreeNode node in sceneTreeView.Nodes) for(var i = 0; i < treeNodeSelectedList.Count; i++)
{ {
node.Checked = false; treeNodeSelectedList[i].Checked = false;
} }
sceneTreeView.EndUpdate(); treeRecursionEnabled = true;
treeNodeSelectedList.Clear();
StatusStripUpdate($"Selected {treeNodeSelectedList.Count} object(s).");
} }
private void expandAllToolStripMenuItem_Click(object sender, EventArgs e) private void expandAllToolStripMenuItem_Click(object sender, EventArgs e)

View File

@ -120,6 +120,9 @@
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>312, 17</value> <value>312, 17</value>
</metadata> </metadata>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>432, 17</value>
</metadata>
<data name="fontPreviewBox.Text" xml:space="preserve"> <data name="fontPreviewBox.Text" xml:space="preserve">
<value>abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWYZ <value>abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWYZ
1234567890.:,;'\"(!?)+-*/= 1234567890.:,;'\"(!?)+-*/=
@ -138,9 +141,6 @@ The quick brown fox jumps over the lazy dog. 1234567890
The quick brown fox jumps over the lazy dog. 1234567890</value> The quick brown fox jumps over the lazy dog. 1234567890</value>
</data> </data>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>432, 17</value>
</metadata>
<metadata name="contextMenuStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="contextMenuStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>775, 21</value> <value>775, 21</value>
</metadata> </metadata>