Restore inspection toggle via F1, hooks for exit on mouse up

This commit is contained in:
John Lewin 2017-09-19 08:44:43 -07:00
parent b2d35e853e
commit 270025844e
2 changed files with 65 additions and 15 deletions

View file

@ -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<GuiWidget, TreeNode> treeNodes = new Dictionary<GuiWidget, TreeNode>();
private Dictionary<GuiWidget, TreeNode> treeNodes = new Dictionary<GuiWidget, TreeNode>();
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<GuiWidget.WidgetAndPosition>();
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<TreeNode>().FirstOrDefault() is TreeNode firstChild)
{
this.InspectedWidget = firstChild.Tag as GuiWidget;
}
}
}
}

View file

@ -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;
}
}
}