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,
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) =>
{
modelViewer.meshViewerWidget.ResetView();
@ -291,6 +322,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
this.ShowSliceLayers = true;
}
public void SwitchToModelView()
{
this.ShowSliceLayers = false;
}
public void ToggleView()
{
this.ShowSliceLayers = !gcodeViewer.Visible;

View file

@ -54,6 +54,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public class ViewControls3D : ViewControlsBase
{
public event EventHandler ResetView;
public event EventHandler<ViewModeChangedEventArgs> ViewModeChanged;
public event EventHandler<TransformStateChangedEventArgs> TransformStateChanged;
internal OverflowDropdown OverflowButton;
@ -180,17 +182,32 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
partSelectButton.Click += (s, e) => this.ActiveButton = ViewControls3DButtons.PartSelect;
AddChild(partSelectButton);
iconPath = Path.Combine("ViewTransformControls", "layers.png");
var layersButton = buttonFactory.Generate("", StaticData.Instance.LoadIcon(iconPath, 32, 32).InvertLightness());
layersButton.Name = "Toggle Layer View Button";
layersButton.ToolTipText = "Layers".Localize();
layersButton.Margin = 3;
layersButton.Click += (s, e) =>
iconPath = Path.Combine("ViewTransformControls", "model.png");
var modelViewButton = buttonFactory.GenerateRadioButton("", StaticData.Instance.LoadIcon(iconPath, 32, 32));
modelViewButton.Name = "Model View Button";
modelViewButton.ToolTipText = "Model".Localize();
modelViewButton.Checked = true;
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();
parentTabPage.ToggleView();
};
AddChild(layersButton);
this.AddChild(layers3DButton);
}
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)
{
@ -201,6 +218,32 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
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)
{
unregisterEvents?.Invoke(this, null);

View file

@ -45,11 +45,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public class ViewGcodeBasic : GuiWidget
{
private TextWidget gcodeProcessingStateInfoText;
private GCode2DWidget gcode2DWidget;
internal GCode2DWidget gcode2DWidget;
private PrintItemWrapper printItem => ApplicationController.Instance.ActivePrintItem;
private ViewControlsToggle viewControlsToggle;
private GuiWidget gcodeDisplayWidget;
private ColorGradientWidget gradientWidget;
@ -181,18 +179,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
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) =>
{
switch (e.TransformMode)
@ -212,7 +198,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
break;
}
};
this.AddChild(viewControlsToggle);
// *************** AddGCodeFileControls ***************
SetProcessingMessage("");
@ -241,8 +226,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
};
AddChild(gradientWidget);
viewControlsToggle.Visible = true;
GCodeRenderer.ExtrusionColor = ActiveTheme.Instance.PrimaryAccentColor;
var gcodeDetails = new GCodeDetails(this.loadedGCode);
@ -256,32 +239,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
VAnchor = VAnchor.ParentTop | VAnchor.FitToChildren,
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)
{

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