diff --git a/AssetStudioGUI/AssetStudioGUIForm.Designer.cs b/AssetStudioGUI/AssetStudioGUIForm.Designer.cs index 3d91ffd..0752b33 100644 --- a/AssetStudioGUI/AssetStudioGUIForm.Designer.cs +++ b/AssetStudioGUI/AssetStudioGUIForm.Designer.cs @@ -125,6 +125,8 @@ this.statusStrip1 = new System.Windows.Forms.StatusStrip(); this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.showRelatedAssetsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.clearSelectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); @@ -526,7 +528,7 @@ this.allToolStripMenuItem.CheckOnClick = true; this.allToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.allToolStripMenuItem.Name = "allToolStripMenuItem"; - this.allToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.allToolStripMenuItem.Size = new System.Drawing.Size(88, 22); this.allToolStripMenuItem.Text = "All"; this.allToolStripMenuItem.Click += new System.EventHandler(this.typeToolStripMenuItem_Click); // @@ -620,7 +622,7 @@ this.sceneTreeView.Size = new System.Drawing.Size(472, 587); this.sceneTreeView.TabIndex = 1; this.sceneTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.sceneTreeView_AfterCheck); - this.sceneTreeView.MouseClick += new System.Windows.Forms.MouseEventHandler(this.sceneTreeView_MouseClick); + this.sceneTreeView.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.sceneTreeView_NodeMouseClick); // // treeSearch // @@ -629,7 +631,7 @@ this.treeSearch.Location = new System.Drawing.Point(0, 0); this.treeSearch.Name = "treeSearch"; this.treeSearch.Size = new System.Drawing.Size(472, 20); - this.treeSearch.TabIndex = 0; + this.treeSearch.TabIndex = 2; this.treeSearch.Text = " Search "; this.treeSearch.TextChanged += new System.EventHandler(this.treeSearch_TextChanged); this.treeSearch.Enter += new System.EventHandler(this.treeSearch_Enter); @@ -1115,13 +1117,28 @@ // contextMenuStrip2 // this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.showRelatedAssetsToolStripMenuItem, + this.toolStripSeparator7, this.selectAllToolStripMenuItem, this.clearSelectionToolStripMenuItem, this.toolStripSeparator5, this.expandAllToolStripMenuItem, this.collapseAllToolStripMenuItem}); this.contextMenuStrip2.Name = "contextMenuStrip2"; - this.contextMenuStrip2.Size = new System.Drawing.Size(152, 98); + this.contextMenuStrip2.Size = new System.Drawing.Size(152, 126); + this.contextMenuStrip2.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip2_Opening); + // + // showRelatedAssetsToolStripMenuItem + // + this.showRelatedAssetsToolStripMenuItem.Name = "showRelatedAssetsToolStripMenuItem"; + this.showRelatedAssetsToolStripMenuItem.Size = new System.Drawing.Size(151, 22); + this.showRelatedAssetsToolStripMenuItem.Text = "Related assets"; + this.showRelatedAssetsToolStripMenuItem.Click += new System.EventHandler(this.showRelatedAssetsToolStripMenuItem_Click); + // + // toolStripSeparator7 + // + this.toolStripSeparator7.Name = "toolStripSeparator7"; + this.toolStripSeparator7.Size = new System.Drawing.Size(148, 6); // // selectAllToolStripMenuItem // @@ -1286,7 +1303,6 @@ private System.Windows.Forms.TextBox treeSearch; private System.Windows.Forms.ToolStripMenuItem loadFileToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem loadFolderToolStripMenuItem; - private System.Windows.Forms.ListView assetListView; private System.Windows.Forms.ColumnHeader columnHeaderName; private System.Windows.Forms.ColumnHeader columnHeaderSize; private System.Windows.Forms.ColumnHeader columnHeaderType; @@ -1386,6 +1402,9 @@ private System.Windows.Forms.RichTextBox listSearch; private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; private System.Windows.Forms.ToolStripMenuItem allLive2DModelsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem showRelatedAssetsToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; + private System.Windows.Forms.ListView assetListView; } } diff --git a/AssetStudioGUI/AssetStudioGUIForm.cs b/AssetStudioGUI/AssetStudioGUIForm.cs index 855f0f8..55db635 100644 --- a/AssetStudioGUI/AssetStudioGUIForm.cs +++ b/AssetStudioGUI/AssetStudioGUIForm.cs @@ -502,10 +502,10 @@ namespace AssetStudioGUI switch (e.TabPageIndex) { case 0: - treeSearch.Select(); + sceneTreeView.Select(); break; case 1: - listSearch.Select(); + assetListView.Select(); break; } } @@ -1812,10 +1812,11 @@ namespace AssetStudioGUI logger.ShowErrorMessage = toolStripMenuItem15.Checked; } - private void sceneTreeView_MouseClick(object sender, MouseEventArgs e) + private void sceneTreeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { - if (e.Button == MouseButtons.Right && sceneTreeView.Nodes.Count > 0) + if (e.Button == MouseButtons.Right) { + sceneTreeView.SelectedNode = e.Node; contextMenuStrip2.Show(sceneTreeView, e.Location.X, e.Location.Y); } } @@ -1924,6 +1925,77 @@ namespace AssetStudioGUI } } + private void selectRelatedAsset(object sender, EventArgs e) + { + var selectedItem = (ToolStripMenuItem)sender; + var index = int.Parse(selectedItem.Name.Split('_')[0]); + + assetListView.SelectedIndices.Clear(); + tabControl1.SelectedTab = tabPage2; + var assetItem = assetListView.Items[index]; + assetItem.Selected = true; + assetItem.EnsureVisible(); + } + + private void selectAllRelatedAssets(object sender, EventArgs e) + { + var selectedNode = sceneTreeView.SelectedNode; + var relatedAssets = visibleAssets.FindAll(x => x.TreeNode == selectedNode); + if (relatedAssets.Count > 0) + { + assetListView.SelectedIndices.Clear(); + tabControl1.SelectedTab = tabPage2; + foreach (var asset in relatedAssets) + { + var assetItem = assetListView.Items[assetListView.Items.IndexOf(asset)]; + assetItem.Selected = true; + } + assetListView.Items[assetListView.Items.IndexOf(relatedAssets[0])].EnsureVisible(); + } + } + + private void showRelatedAssetsToolStripMenuItem_Click(object sender, EventArgs e) + { + var selectedNode = sceneTreeView.SelectedNode; + var relatedAssets = visibleAssets.FindAll(x => x.TreeNode == selectedNode); + if (relatedAssets.Count == 0) + { + StatusStripUpdate("No related assets were found among the visible assets."); + } + } + + private void contextMenuStrip2_Opening(object sender, System.ComponentModel.CancelEventArgs e) + { + var selectedNode = sceneTreeView.SelectedNode; + var relatedAssets = visibleAssets.FindAll(x => x.TreeNode == selectedNode); + showRelatedAssetsToolStripMenuItem.DropDownItems.Clear(); + if (relatedAssets.Count > 1) + { + var assetItem = new ToolStripMenuItem + { + CheckOnClick = false, + Name = "selectAllRelatedAssetsToolStripMenuItem", + Size = new Size(180, 22), + Text = "Select all" + }; + assetItem.Click += selectAllRelatedAssets; + showRelatedAssetsToolStripMenuItem.DropDownItems.Add(assetItem); + } + foreach (var asset in relatedAssets) + { + var index = assetListView.Items.IndexOf(asset); + var assetItem = new ToolStripMenuItem + { + CheckOnClick = false, + Name = $"{index}_{asset.TypeString}", + Size = new Size(180, 22), + Text = $"({asset.TypeString}) {asset.Text}" + }; + assetItem.Click += selectRelatedAsset; + showRelatedAssetsToolStripMenuItem.DropDownItems.Add(assetItem); + } + } + #region FMOD private void FMODinit() { diff --git a/AssetStudioGUI/AssetStudioGUIForm.resx b/AssetStudioGUI/AssetStudioGUIForm.resx index dcce5cf..095950b 100644 --- a/AssetStudioGUI/AssetStudioGUIForm.resx +++ b/AssetStudioGUI/AssetStudioGUIForm.resx @@ -120,9 +120,6 @@ 312, 17 - - 432, 17 - abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWYZ 1234567890.:,;'\"(!?)+-*/= @@ -141,6 +138,9 @@ The quick brown fox jumps over the lazy dog. 1234567890 The quick brown fox jumps over the lazy dog. 1234567890 + + 432, 17 + 775, 21