using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using MCPForUnity.Editor.Clients; using MCPForUnity.Editor.Constants; using MCPForUnity.Editor.Helpers; using MCPForUnity.Editor.Models; using MCPForUnity.Editor.Services; using MCPForUnity.Editor.Services.Transport; using MCPForUnity.Editor.Tools; using UnityEditor; using UnityEditor.UIElements; using UnityEngine.UIElements; namespace MCPForUnity.Editor.Windows.Components.Tools { /// /// Controller for the Tools section inside the MCP for Unity editor window. /// Provides discovery, filtering, and per-tool enablement toggles. /// Tools are grouped by their Group property (core first, then alphabetical). /// public class McpToolsSection { private readonly Dictionary toolToggleMap = new(); private Toggle projectScopedToolsToggle; private Label summaryLabel; private Label noteLabel; private Button enableAllButton; private Button disableAllButton; private Button rescanButton; private Button reconfigureButton; private VisualElement categoryContainer; private List allTools = new(); private readonly Dictionary groupToggleMap = new(); private readonly List<(Foldout foldout, string title, List tools)> foldoutEntries = new(); /// Human-friendly names for tool groups shown in the UI. private static readonly Dictionary GroupDisplayNames = new(StringComparer.OrdinalIgnoreCase) { { "core", "Core Tools" }, { "vfx", "VFX & Shaders" }, { "animation", "Animation" }, { "ui", "UI Toolkit" }, { "scripting_ext", "Scripting Extensions" }, { "testing", "Testing" }, { "probuilder", "ProBuilder — Experimental" }, { "profiling", "Profiling & Frame Debugger" }, }; public VisualElement Root { get; } public McpToolsSection(VisualElement root) { Root = root; CacheUIElements(); RegisterCallbacks(); } private void CacheUIElements() { projectScopedToolsToggle = Root.Q("project-scoped-tools-toggle"); summaryLabel = Root.Q