From 321d24e5cd0fd01965f6bbdb5e0ec7e186dabf7e Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 22 Mar 2018 13:18:27 -0700 Subject: [PATCH] Revise rules for showing operation buttons - Issue MatterHackers/MCCentral#2852 Wrapping operation buttons should be hidden if not in scene root --- PartPreviewWindow/SelectedObjectPanel.cs | 93 +++++++++++++----------- 1 file changed, 51 insertions(+), 42 deletions(-) diff --git a/PartPreviewWindow/SelectedObjectPanel.cs b/PartPreviewWindow/SelectedObjectPanel.cs index 52246191b..a50f2b669 100644 --- a/PartPreviewWindow/SelectedObjectPanel.cs +++ b/PartPreviewWindow/SelectedObjectPanel.cs @@ -410,54 +410,63 @@ namespace MatterHackers.MatterControl.PartPreviewWindow editorPanel.AddChild(editorWidget); - var buttons = new List(); - - foreach (var graphOperation in ApplicationController.Instance.Graph.Operations) + // Only add Operation buttons if the item is rooted in the scene + if (selectedItem.Parent.Parent == null) { - foreach (var type in graphOperation.MappedTypes) - { - if (type.IsAssignableFrom(selectedItemType)) - { - var button = new OperationButton(graphOperation, selectedItem, theme) - { - BackgroundColor = theme.MinimalShade, - Margin = theme.ButtonSpacing - }; - button.EnsureAvailablity(); - button.Click += (s, e) => - { - graphOperation.Operation(selectedItem, scene).ConfigureAwait(false); - }; + var buttons = new List(); - buttons.Add(button); + foreach (var graphOperation in ApplicationController.Instance.Graph.Operations) + { + foreach (var type in graphOperation.MappedTypes) + { + if (type.IsAssignableFrom(selectedItemType)) + { + var button = new OperationButton(graphOperation, selectedItem, theme) + { + BackgroundColor = theme.MinimalShade, + Margin = theme.ButtonSpacing + }; + button.EnsureAvailablity(); + button.Click += (s, e) => + { + graphOperation.Operation(selectedItem, scene).ConfigureAwait(false); + }; + + buttons.Add(button); + } } } + + if (buttons.Any()) + { + var toolbar = new Toolbar() + { + HAnchor = HAnchor.Stretch, + VAnchor = VAnchor.Fit, + Padding = theme.ToolbarPadding, + Margin = new BorderDouble(0, 8) + }; + editorPanel.AddChild(toolbar); + + foreach (var button in buttons) + { + toolbar.AddChild(button); + } + + // TODO: Fix likely leak + selectedItem.Invalidated += (s, e) => + { + foreach (var button in toolbar.ActionArea.Children.OfType()) + { + button.EnsureAvailablity(); + } + }; + } } - - if (buttons.Any()) + else { - var toolbar = new Toolbar() - { - HAnchor = HAnchor.Stretch, - VAnchor = VAnchor.Fit, - Padding = theme.ToolbarPadding, - Margin = new BorderDouble(0, 8) - }; - editorPanel.AddChild(toolbar); - - foreach (var button in buttons) - { - toolbar.AddChild(button); - } - - // TODO: Fix likely leak - selectedItem.Invalidated += (s, e) => - { - foreach (var button in toolbar.ActionArea.Children.OfType()) - { - button.EnsureAvailablity(); - } - }; + // If the button toolbar isn't added, ensure panel has bottom margin + editorWidget.Margin = editorWidget.Margin.Clone(bottom: 15); } } }