Ensure view and button state are always synced

This commit is contained in:
John Lewin 2017-07-07 06:18:58 -07:00
parent 485991a223
commit 1a9d90bc15
3 changed files with 84 additions and 50 deletions

View file

@ -76,33 +76,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
};
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;
}
this.ViewMode = e.ViewMode;
};
viewControls3D.ResetView += (sender, e) =>
@ -317,25 +291,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
sideBar.AddPage("Terminal".Localize(), terminalControls);
}
public void SwitchToLayerView()
{
this.ShowSliceLayers = true;
}
public void SwitchToModelView()
{
this.ShowSliceLayers = false;
}
public void ToggleView()
{
this.ShowSliceLayers = !gcodeViewer.Visible;
}
private GCodeFile loadedGCode => printer.BedPlate.LoadedGCode;
private bool showSliceLayers;
public bool ShowSliceLayers
private bool ShowSliceLayers
{
get => showSliceLayers;
set
@ -359,6 +318,49 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
private PartViewMode viewMode;
public PartViewMode ViewMode
{
get => viewMode;
set
{
if (viewMode != value)
{
viewMode = value;
viewControls3D.ViewMode = viewMode;
switch (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.ShowSliceLayers = true;
break;
case PartViewMode.Layers3D:
UserSettings.Instance.set("LayerViewDefault", "3D Layer");
if (gcodeViewer.gcode2DWidget != null)
{
gcodeViewer.gcode2DWidget.Visible = false;
}
this.ShowSliceLayers = true;
break;
case PartViewMode.Model:
this.ShowSliceLayers = false;
break;
}
}
}
}
private async void LoadActivePrintItem()
{
await modelViewer.ClearBedAndLoadPrintItemWrapper(printItem);

View file

@ -121,7 +121,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
ApplicationController.Instance.Printer.BedPlate.LoadGCode(printItem.GetGCodePathAndFileName(), printerTabPage.gcodeViewer.LoadProgress_Changed);
sliceProgressReporter.EndReporting();
printerTabPage.SwitchToLayerView();
printerTabPage.ViewMode = PartViewMode.Layers3D;
// HACK: directly fire method which previously ran on SlicingDone event on PrintItemWrapper
UiThread.RunOnIdle(printerTabPage.gcodeViewer.CreateAndAddChildren);

View file

@ -222,28 +222,60 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
if (sender is GuiWidget widget)
{
PartViewMode viewMode;
if (widget.Name == "Layers2D Button")
{
viewMode = PartViewMode.Layers2D;
this.ViewMode = PartViewMode.Layers2D;
}
else if (widget.Name == "Layers3D Button")
{
viewMode = PartViewMode.Layers3D;
this.ViewMode = PartViewMode.Layers3D;
}
else
{
viewMode = PartViewMode.Model;
this.ViewMode = PartViewMode.Model;
}
ViewModeChanged?.Invoke(this, new ViewModeChangedEventArgs()
{
ViewMode = viewMode
ViewMode = this.ViewMode
});
}
}
private PartViewMode viewMode;
public PartViewMode ViewMode
{
get => viewMode;
set
{
if (viewMode != value)
{
viewMode = value;
string controlName;
if (viewMode == PartViewMode.Layers2D)
{
controlName = "Layers2D Button";
}
else if (viewMode == PartViewMode.Layers3D)
{
controlName = "Layers3D Button";
}
else
{
controlName = "Model View Button";
}
var targetChild = Children.Where(c => c.Name == controlName).FirstOrDefault();
if (targetChild != null && targetChild is RadioButton button)
{
button.Checked = true;
}
}
}
}
public override void OnClosed(ClosedEventArgs e)
{
unregisterEvents?.Invoke(this, null);