diff --git a/InspectForm.cs b/InspectForm.cs index 45636f07d..03aa3688d 100644 --- a/InspectForm.cs +++ b/InspectForm.cs @@ -11,6 +11,7 @@ namespace MatterHackers.MatterControl public partial class InspectForm : Form { private TreeNode activeTreeNode; + private GuiWidget inspectedWidget; private GuiWidget InspectedWidget { @@ -20,14 +21,21 @@ namespace MatterHackers.MatterControl if (inspectedWidget != null) { inspectedWidget.DebugShowBounds = false; + inspectedWidget.MouseUp -= InspectedWidget_MouseUp; + inspectedWidget.MouseDown -= InspectedWidget_MouseUp; } inspectedWidget = value; - inspectedWidget.DebugShowBounds = true; if (inspectedWidget != null) { propertyGrid1.SelectedObject = inspectedWidget; + + inspectedWidget.DebugShowBounds = true; + + // Hook to stop listing on click + inspectedWidget.MouseUp += InspectedWidget_MouseUp; + inspectedWidget.MouseDown += InspectedWidget_MouseUp; } if (activeTreeNode != null) @@ -46,26 +54,30 @@ namespace MatterHackers.MatterControl } } - bool showNamesUnderMouse = true; - private GuiWidget inspectedSystemWindow; private Vector2 mousePosition; - Dictionary treeNodes = new Dictionary(); + private Dictionary treeNodes = new Dictionary(); public InspectForm(GuiWidget inspectionSource) { InitializeComponent(); + // Store position on move, invalidate in needed inspectionSource.MouseMove += (s, e) => { mousePosition = e.Position; + + if (this.inspectedWidget?.FirstWidgetUnderMouse == false) + { + this.inspectedSystemWindow.Invalidate(); + } }; inspectionSource.AfterDraw += (s, e) => { - if (showNamesUnderMouse && !inspectionSource.HasBeenClosed) + if (this.Inspecting && !inspectionSource.HasBeenClosed) { var namedChildren = new List(); inspectedSystemWindow.FindNamedChildrenRecursive( @@ -91,6 +103,14 @@ namespace MatterHackers.MatterControl inspectionSource.Invalidate(); } + public bool Inspecting { get; set; } + + private void InspectedWidget_MouseUp(object sender, Agg.UI.MouseEventArgs e) + { + // Stop listing on click + this.Inspecting = false; + } + private void AddItem(GuiWidget widget, string text, TreeNode childNode = null) { if (treeNodes.TryGetValue(widget, out TreeNode existingNode)) @@ -180,5 +200,21 @@ namespace MatterHackers.MatterControl { this.InspectedWidget.Invalidate(); } + + public void MoveUpTree() + { + if (activeTreeNode?.Parent is TreeNode parent) + { + this.InspectedWidget = parent.Tag as GuiWidget; + } + } + + public void MoveDownTree() + { + if (activeTreeNode?.Nodes.Cast().FirstOrDefault() is TreeNode firstChild) + { + this.InspectedWidget = firstChild.Tag as GuiWidget; + } + } } } diff --git a/MatterControlApplication.cs b/MatterControlApplication.cs index 7180826d8..5addb9904 100644 --- a/MatterControlApplication.cs +++ b/MatterControlApplication.cs @@ -757,18 +757,32 @@ namespace MatterHackers.MatterControl if (!keyEvent.Handled) { - if (keyEvent.KeyCode == Keys.F1) + switch (keyEvent.KeyCode) { - //showNamesUnderMouse = !showNamesUnderMouse; - if (inspectForm == null) - { - inspectForm = new InspectForm(this); - inspectForm.FormClosed += (s, e2) => + case Keys.F1: + if (inspectForm != null) { - inspectForm = null; - }; - inspectForm.Show(); - } + // Toggle mode if window is open + inspectForm.Inspecting = !inspectForm.Inspecting; + } + else + { + // Otherwise open + inspectForm = new InspectForm(this); + inspectForm.FormClosed += (s, e2) => + { + inspectForm = null; + }; + inspectForm.Show(); + } + break; + case Keys.F2: + inspectForm?.MoveUpTree(); + break; + + case Keys.F3: + inspectForm?.MoveDownTree(); + break; } } }