From 5e85b29e1149f0c19a5c8f0db0770a9f562a5ed4 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 6 Jul 2017 18:15:53 -0700 Subject: [PATCH] Move view mode selection buttons into main toolbar, revise icons --- PartPreviewWindow/PrinterTabPage.cs | 36 ++++++++++ PartPreviewWindow/ViewControls3D.cs | 63 +++++++++++++++--- PartPreviewWindow/ViewGcodeBasic.cs | 42 +----------- .../Icons/ViewTransformControls/model.png | Bin 0 -> 590 bytes .../Icons/ViewTransformControls/reset.png | Bin 505 -> 612 bytes 5 files changed, 90 insertions(+), 51 deletions(-) create mode 100644 StaticData/Icons/ViewTransformControls/model.png diff --git a/PartPreviewWindow/PrinterTabPage.cs b/PartPreviewWindow/PrinterTabPage.cs index f0334bb30..de1629ce9 100644 --- a/PartPreviewWindow/PrinterTabPage.cs +++ b/PartPreviewWindow/PrinterTabPage.cs @@ -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; diff --git a/PartPreviewWindow/ViewControls3D.cs b/PartPreviewWindow/ViewControls3D.cs index 05cda45c9..c4561f428 100644 --- a/PartPreviewWindow/ViewControls3D.cs +++ b/PartPreviewWindow/ViewControls3D.cs @@ -54,6 +54,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public class ViewControls3D : ViewControlsBase { public event EventHandler ResetView; + public event EventHandler ViewModeChanged; + public event EventHandler 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().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); diff --git a/PartPreviewWindow/ViewGcodeBasic.cs b/PartPreviewWindow/ViewGcodeBasic.cs index 0e551a380..fc0efa3d2 100644 --- a/PartPreviewWindow/ViewGcodeBasic.cs +++ b/PartPreviewWindow/ViewGcodeBasic.cs @@ -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) { diff --git a/StaticData/Icons/ViewTransformControls/model.png b/StaticData/Icons/ViewTransformControls/model.png new file mode 100644 index 0000000000000000000000000000000000000000..1b1cbfa40081ff56a738eebb27aeb40f408a2be2 GIT binary patch literal 590 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U|>mi z^mSxl*x1kgCy|wbfq}EYBeIx*f$uN~Gak=hk;1^hAX(xXQ4*Y=R#Ki=l*&+$n3-3i zmzP?iV4`QBXK3bb@+cF_gk;h}9k3^1H(!`?; zy+>0f_)2b&;5qd`S2%IA$C8eS87`jpPFZVK{`_|(*+TZX?e}|&ul&54zN37{`TsWO z|NogU{o(O*dv&gr9zTA4X}@^Lb;dEiYZv-bDyBtDS->3iMKoICxRBq+mc%QH%!%q! zni)sT^gi?mPEqE)#Vb0!mrdq@oV$dx+@pt9o-YonzBAyqt+kr7Xwm5fb8j4xo)*X& zzVZmSSOCX%|Alh{H{RMS{bEIuK*_3)jB~fn%3(NqLHM7TX)?E30o&hmA|)Y?$3+tM zI9o4@%W%?rl(6XfMkcK}RZh0t>D4tN->ITWTanN z@i}1eP2ESCj7H4M?|s^)1yh3=rR=26Pc8^`uq!!uLpS4VFyk!V z=86LXO_E9XFKS$UyPbL;DV^Afo({9S)uTf^1k`~KTc5=6oy+Vkwg rW92$uhz1|7{1tzpU%p?MqlPJ@ci(Tx<5_hK3=9mOu6{1-oD!M<`pxs3 literal 0 HcmV?d00001 diff --git a/StaticData/Icons/ViewTransformControls/reset.png b/StaticData/Icons/ViewTransformControls/reset.png index e1163079d93aad4f187003e516fd912dd7481f45..99725d4fc8e9820ccc8fb68068510dbfc467bc87 100644 GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U|>mi z^mSxl*x1kgCy|wbfq}EYBeIx*f$uN~Gak=hk;1^hAX(xXQ4*Y=R#Ki=l*&+$n3-3i zmzP?iV4`QBXK3b7srqY_qW&f>Zb%s9RDcECfF_3S@gTtX`8T%qM*K@ z)l)B(+X0<*rC$HoWo27EG*m?5gyyy|1#*=gPTRR}zw!5VJDsXX>LGP$Pf_nDc0 z=2gEt?W5MUsQhVe+Y@AD=C$6-WZ@~9RHMi%N3$M34!Ierc0O}Tn5o1;qpHB(sy~Nh z>J~As+_c$e-erwAtH*^h5B0BILJ^0rZyU!Ex~e}8D-v!fY%%hqu3D)#|9@rif;Edjodw?4Gw zovAH3^ri)**sZS6d|N^5{fe{Sy4&`(?%Um%f8rL%Lr>1{W3IaClfY#)`A|cWpFy{z zPcnn0_30;;yxYHcUDe)huwcd}yS8r(*CP%wJxkW!;kfCUFS~`aywt+;DLl_TuI+ir zu>8W~&>zLtJiOD^{FHf+%)6l8x~fk-+5SS;A;x`9?|W0uYV1=8Et_`ov#IkZGh}qQ b)2P2h3)Z3=9mOu6{1-oD!M{(JaZG%Q-e|yQz{EjrrIztFwXXLaSW-r_2#y%-(d#<)&%`00wFRDUCc|KvdJj0 z@=lF@=kQp{wTW9XP*G7)CFrSGTKJ71gShHrem2It^Opn${ZM~@d#kW|-|E-9PV79_ zb%vXP;l$oUo*Qxx?m8v8fJguEcekYH+7CG;4uzln{QTL+)P$ee_is?FTj<4vuDR2&oWdnDp={Dl0#gL9eV+rv2Dv(k zL>7gq9|~I-8?GGsuI$1P#QR@t`zuOc|6X_@w7*B+zr0w# z?VV_!&g(3J@(u