diff --git a/MatterControl.csproj b/MatterControl.csproj index 0da9e7b14..813dddeb6 100644 --- a/MatterControl.csproj +++ b/MatterControl.csproj @@ -143,10 +143,10 @@ - + Form - + InspectForm.cs @@ -497,7 +497,7 @@ config.json - + InspectForm.cs 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; } } } diff --git a/InspectForm.Designer.cs b/Utilities/InspectForm.Designer.cs similarity index 100% rename from InspectForm.Designer.cs rename to Utilities/InspectForm.Designer.cs diff --git a/InspectForm.cs b/Utilities/InspectForm.cs similarity index 66% rename from InspectForm.cs rename to Utilities/InspectForm.cs index 45636f07d..d3cc813fe 100644 --- a/InspectForm.cs +++ b/Utilities/InspectForm.cs @@ -11,61 +11,30 @@ namespace MatterHackers.MatterControl public partial class InspectForm : Form { private TreeNode activeTreeNode; - private GuiWidget inspectedWidget; - private GuiWidget InspectedWidget - { - get => inspectedWidget; - set - { - if (inspectedWidget != null) - { - inspectedWidget.DebugShowBounds = false; - } - - inspectedWidget = value; - inspectedWidget.DebugShowBounds = true; - - if (inspectedWidget != null) - { - propertyGrid1.SelectedObject = inspectedWidget; - } - - if (activeTreeNode != null) - { - activeTreeNode.Checked = false; - } - - if (treeNodes.TryGetValue(inspectedWidget, out TreeNode treeNode)) - { - treeView1.SelectedNode = treeNode; - activeTreeNode = treeNode; - activeTreeNode.Checked = true; - } - - inspectedWidget.Invalidate(); - } - } - - 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 +60,56 @@ namespace MatterHackers.MatterControl inspectionSource.Invalidate(); } + public bool Inspecting { get; set; } + + private GuiWidget _inspectedWidget; + private GuiWidget InspectedWidget + { + get => _inspectedWidget; + set + { + if (_inspectedWidget != null) + { + _inspectedWidget.DebugShowBounds = false; + _inspectedWidget.MouseUp -= InspectedWidget_MouseUp; + _inspectedWidget.MouseDown -= InspectedWidget_MouseUp; + } + + _inspectedWidget = value; + + 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) + { + activeTreeNode.Checked = false; + } + + if (treeNodes.TryGetValue(_inspectedWidget, out TreeNode treeNode)) + { + treeView1.SelectedNode = treeNode; + activeTreeNode = treeNode; + activeTreeNode.Checked = true; + } + + _inspectedWidget.Invalidate(); + } + } + + 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)) @@ -142,7 +161,7 @@ namespace MatterHackers.MatterControl private string BuildName(GuiWidget widget) { - string nameToWrite = inspectedWidget == widget ? "* " : ""; + string nameToWrite = _inspectedWidget == widget ? "* " : ""; if (!string.IsNullOrEmpty(widget.Name)) { nameToWrite += $"{widget.GetType().Name} --- {widget.Name}"; @@ -155,22 +174,6 @@ namespace MatterHackers.MatterControl return nameToWrite; } - int selectionIndex; - - protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e) - { - if (e.KeyCode == System.Windows.Forms.Keys.F2) - { - selectionIndex++; - } - else if (e.KeyCode == System.Windows.Forms.Keys.F2) - { - selectionIndex--; - } - - base.OnKeyDown(e); - } - private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { this.InspectedWidget = e.Node.Tag as GuiWidget; @@ -180,5 +183,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/InspectForm.resx b/Utilities/InspectForm.resx similarity index 100% rename from InspectForm.resx rename to Utilities/InspectForm.resx