Ensure view and button state are always synced
This commit is contained in:
parent
485991a223
commit
1a9d90bc15
3 changed files with 84 additions and 50 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue