Move view mode selection buttons into main toolbar, revise icons

This commit is contained in:
John Lewin 2017-07-06 18:15:53 -07:00
parent e95803d68e
commit 5e85b29e11
5 changed files with 90 additions and 51 deletions

View file

@ -74,6 +74,37 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Visible = true, Visible = true,
Margin = new BorderDouble(11, 0, 0, 50) Margin = new BorderDouble(11, 0, 0, 50)
}; };
viewControls3D.ViewModeChanged += (s, e) =>
{
switch(e.ViewMode)
{
case PartViewMode.Layers2D:
UserSettings.Instance.set("LayerViewDefault", "2D Layer");
if (gcodeViewer.gcode2DWidget != null)
{
gcodeViewer.gcode2DWidget.Visible = true;
// HACK: Getting the Layer2D view to show content only works if CenterPartInView is called after the control is visible and after some cycles have passed
UiThread.RunOnIdle(gcodeViewer.gcode2DWidget.CenterPartInView);
}
this.SwitchToLayerView();
break;
case PartViewMode.Layers3D:
UserSettings.Instance.set("LayerViewDefault", "3D Layer");
if (gcodeViewer.gcode2DWidget != null)
{
gcodeViewer.gcode2DWidget.Visible = false;
}
this.SwitchToLayerView();
break;
case PartViewMode.Model:
this.SwitchToModelView();
break;
}
};
viewControls3D.ResetView += (sender, e) => viewControls3D.ResetView += (sender, e) =>
{ {
modelViewer.meshViewerWidget.ResetView(); modelViewer.meshViewerWidget.ResetView();
@ -291,6 +322,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
this.ShowSliceLayers = true; this.ShowSliceLayers = true;
} }
public void SwitchToModelView()
{
this.ShowSliceLayers = false;
}
public void ToggleView() public void ToggleView()
{ {
this.ShowSliceLayers = !gcodeViewer.Visible; this.ShowSliceLayers = !gcodeViewer.Visible;

View file

@ -54,6 +54,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public class ViewControls3D : ViewControlsBase public class ViewControls3D : ViewControlsBase
{ {
public event EventHandler ResetView; public event EventHandler ResetView;
public event EventHandler<ViewModeChangedEventArgs> ViewModeChanged;
public event EventHandler<TransformStateChangedEventArgs> TransformStateChanged; public event EventHandler<TransformStateChangedEventArgs> TransformStateChanged;
internal OverflowDropdown OverflowButton; internal OverflowDropdown OverflowButton;
@ -180,17 +182,32 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
partSelectButton.Click += (s, e) => this.ActiveButton = ViewControls3DButtons.PartSelect; partSelectButton.Click += (s, e) => this.ActiveButton = ViewControls3DButtons.PartSelect;
AddChild(partSelectButton); AddChild(partSelectButton);
iconPath = Path.Combine("ViewTransformControls", "layers.png"); iconPath = Path.Combine("ViewTransformControls", "model.png");
var layersButton = buttonFactory.Generate("", StaticData.Instance.LoadIcon(iconPath, 32, 32).InvertLightness()); var modelViewButton = buttonFactory.GenerateRadioButton("", StaticData.Instance.LoadIcon(iconPath, 32, 32));
layersButton.Name = "Toggle Layer View Button"; modelViewButton.Name = "Model View Button";
layersButton.ToolTipText = "Layers".Localize(); modelViewButton.ToolTipText = "Model".Localize();
layersButton.Margin = 3; modelViewButton.Checked = true;
layersButton.Click += (s, e) => modelViewButton.Margin = 3;
modelViewButton.Click += SwitchModes_Click;
AddChild(modelViewButton);
var layers3DButton = buttonFactory.GenerateRadioButton("", Path.Combine("ViewTransformControls", "3d.png"));
layers3DButton.Name = "Layers3D Button";
layers3DButton.ToolTipText = "3D Layers".Localize();
layers3DButton.Click += SwitchModes_Click;
layers3DButton.Margin = new BorderDouble(3);
if (!UserSettings.Instance.IsTouchScreen)
{ {
var parentTabPage = this.Parents<PrinterTabPage>().First(); this.AddChild(layers3DButton);
parentTabPage.ToggleView(); }
};
AddChild(layersButton); var layers2DButton = buttonFactory.GenerateRadioButton("", Path.Combine("ViewTransformControls", "2d.png"));
layers2DButton.Name = "Layers2D Button";
layers2DButton.ToolTipText = "2D Layers".Localize();
layers2DButton.Margin = new BorderDouble(3);
layers2DButton.Click += SwitchModes_Click;
this.AddChild(layers2DButton);
OverflowButton = new OverflowDropdown(allowLightnessInvert: false) OverflowButton = new OverflowDropdown(allowLightnessInvert: false)
{ {
@ -201,6 +218,32 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
AddChild(OverflowButton); AddChild(OverflowButton);
} }
private void SwitchModes_Click(object sender, MouseEventArgs e)
{
if (sender is GuiWidget widget)
{
PartViewMode viewMode;
if (widget.Name == "Layers2D Button")
{
viewMode = PartViewMode.Layers2D;
}
else if (widget.Name == "Layers3D Button")
{
viewMode = PartViewMode.Layers3D;
}
else
{
viewMode = PartViewMode.Model;
}
ViewModeChanged?.Invoke(this, new ViewModeChangedEventArgs()
{
ViewMode = viewMode
});
}
}
public override void OnClosed(ClosedEventArgs e) public override void OnClosed(ClosedEventArgs e)
{ {
unregisterEvents?.Invoke(this, null); unregisterEvents?.Invoke(this, null);

View file

@ -45,11 +45,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public class ViewGcodeBasic : GuiWidget public class ViewGcodeBasic : GuiWidget
{ {
private TextWidget gcodeProcessingStateInfoText; private TextWidget gcodeProcessingStateInfoText;
private GCode2DWidget gcode2DWidget; internal GCode2DWidget gcode2DWidget;
private PrintItemWrapper printItem => ApplicationController.Instance.ActivePrintItem; private PrintItemWrapper printItem => ApplicationController.Instance.ActivePrintItem;
private ViewControlsToggle viewControlsToggle;
private GuiWidget gcodeDisplayWidget; private GuiWidget gcodeDisplayWidget;
private ColorGradientWidget gradientWidget; private ColorGradientWidget gradientWidget;
@ -181,18 +179,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
gcode2DWidget.CenterPartInView(); gcode2DWidget.CenterPartInView();
} }
}; };
viewControlsToggle = new ViewControlsToggle(ApplicationController.Instance.Theme.ViewControlsButtonFactory, activeViewMode)
{
Visible = false,
HAnchor = HAnchor.ParentRight
};
viewControlsToggle.ViewModeChanged += (s, e) =>
{
// Respond to user driven view mode change events and store and switch to the new mode
activeViewMode = e.ViewMode;
SwitchViewModes();
};
viewControls3D.TransformStateChanged += (s, e) => viewControls3D.TransformStateChanged += (s, e) =>
{ {
switch (e.TransformMode) switch (e.TransformMode)
@ -212,7 +198,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
break; break;
} }
}; };
this.AddChild(viewControlsToggle);
// *************** AddGCodeFileControls *************** // *************** AddGCodeFileControls ***************
SetProcessingMessage(""); SetProcessingMessage("");
@ -241,8 +226,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}; };
AddChild(gradientWidget); AddChild(gradientWidget);
viewControlsToggle.Visible = true;
GCodeRenderer.ExtrusionColor = ActiveTheme.Instance.PrimaryAccentColor; GCodeRenderer.ExtrusionColor = ActiveTheme.Instance.PrimaryAccentColor;
var gcodeDetails = new GCodeDetails(this.loadedGCode); var gcodeDetails = new GCodeDetails(this.loadedGCode);
@ -256,32 +239,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
VAnchor = VAnchor.ParentTop | VAnchor.FitToChildren, VAnchor = VAnchor.ParentTop | VAnchor.FitToChildren,
Width = 150 Width = 150
}); });
// Switch to the most recent view mode, defaulting to Layers3D
SwitchViewModes();
} }
} }
private void SwitchViewModes()
{
bool inLayers3DMode = activeViewMode == PartViewMode.Layers3D;
if (inLayers3DMode)
{
UserSettings.Instance.set("LayerViewDefault", "3D Layer");
}
else
{
UserSettings.Instance.set("LayerViewDefault", "2D Layer");
// HACK: Getting the Layer2D view to show content only works if CenterPartInView is called after the control is visible and after some cycles have passed
UiThread.RunOnIdle(gcode2DWidget.CenterPartInView);
}
if (gcode2DWidget != null)
{
gcode2DWidget.Visible = !inLayers3DMode;
}
}
internal void LoadProgress_Changed((double progress0To1, string processingState) progress, CancellationTokenSource continueProcessing) internal void LoadProgress_Changed((double progress0To1, string processingState) progress, CancellationTokenSource continueProcessing)
{ {

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 505 B

After

Width:  |  Height:  |  Size: 612 B

Before After
Before After