Merge pull request #2451 from jlewin/design_tools

Update Inspector
This commit is contained in:
johnlewin 2017-09-19 11:43:09 -07:00 committed by GitHub
commit cd66e98420
5 changed files with 102 additions and 69 deletions

View file

@ -143,10 +143,10 @@
<Compile Include="CustomWidgets\RadioImageWidget.cs" />
<Compile Include="CustomWidgets\RadioPanelWidget.cs" />
<Compile Include="CustomWidgets\ValueDisplayInfo.cs" />
<Compile Include="InspectForm.cs">
<Compile Include="Utilities\InspectForm.cs" Condition="'$(Configuration)' == 'Debug'">
<SubType>Form</SubType>
</Compile>
<Compile Include="InspectForm.Designer.cs">
<Compile Include="Utilities\InspectForm.Designer.cs" Condition="'$(Configuration)' == 'Debug'">
<DependentUpon>InspectForm.cs</DependentUpon>
</Compile>
<Compile Include="Library\ContentProviders\GCodeContentProvider.cs" />
@ -497,7 +497,7 @@
<EmbeddedResource Include="config.json">
<LogicalName>config.json</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="InspectForm.resx">
<EmbeddedResource Include="Utilities\InspectForm.resx" Condition="'$(Configuration)' == 'Debug'">
<DependentUpon>InspectForm.cs</DependentUpon>
</EmbeddedResource>
<None Include="App.config" />

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

View file

@ -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<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 +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<TreeNode>().FirstOrDefault() is TreeNode firstChild)
{
this.InspectedWidget = firstChild.Tag as GuiWidget;
}
}
}
}