From 5fb26cb024041b68352debe993fd3dc348fd06a2 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Sun, 18 Feb 2018 10:58:47 -0800 Subject: [PATCH] Add color/model view toggles to GCode Options panel --- PartPreviewWindow/GCode3DWidget.cs | 2 +- PartPreviewWindow/GCodeDetailsView.cs | 160 +++++++++++++++++++++++++- StaticData/Icons/materials.png | Bin 0 -> 1058 bytes StaticData/Icons/no-color.png | Bin 0 -> 1027 bytes StaticData/Icons/solid.png | Bin 0 -> 1088 bytes StaticData/Icons/speeds.png | Bin 0 -> 1037 bytes StaticData/Icons/wireframe.png | Bin 0 -> 1147 bytes 7 files changed, 159 insertions(+), 3 deletions(-) create mode 100644 StaticData/Icons/materials.png create mode 100644 StaticData/Icons/no-color.png create mode 100644 StaticData/Icons/solid.png create mode 100644 StaticData/Icons/speeds.png create mode 100644 StaticData/Icons/wireframe.png diff --git a/PartPreviewWindow/GCode3DWidget.cs b/PartPreviewWindow/GCode3DWidget.cs index 430d08a28..a63dba441 100644 --- a/PartPreviewWindow/GCode3DWidget.cs +++ b/PartPreviewWindow/GCode3DWidget.cs @@ -77,7 +77,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow this.AddChild( new SectionWidget( "Options".Localize(), - new GCodeOptionsPanel(sceneContext, printer), + new GCodeOptionsPanel(sceneContext, printer, theme), theme) { HAnchor = HAnchor.Stretch, diff --git a/PartPreviewWindow/GCodeDetailsView.cs b/PartPreviewWindow/GCodeDetailsView.cs index bee6b8a77..1ab73b792 100644 --- a/PartPreviewWindow/GCodeDetailsView.cs +++ b/PartPreviewWindow/GCodeDetailsView.cs @@ -28,11 +28,13 @@ either expressed or implied, of the FreeBSD Project. */ using System; +using System.Collections.ObjectModel; using MatterHackers.Agg; using MatterHackers.Agg.Platform; using MatterHackers.Agg.UI; using MatterHackers.Localizations; using MatterHackers.MatterControl.ConfigurationPage; +using MatterHackers.MatterControl.CustomWidgets; using MatterHackers.MatterControl.SlicerConfiguration; namespace MatterHackers.MatterControl.PartPreviewWindow @@ -72,10 +74,125 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public class GCodeOptionsPanel : FlowLayoutWidget { - public GCodeOptionsPanel(BedConfig sceneContext, PrinterConfig printer) + private RadioIconButton speedsButton; + private RadioIconButton materialsButton; + private RadioIconButton noColorButton; + private View3DConfig gcodeOptions; + private RadioIconButton solidButton; + + public GCodeOptionsPanel(BedConfig sceneContext, PrinterConfig printer, ThemeConfig theme) : base(FlowDirection.TopToBottom) { - var gcodeOptions = sceneContext.RendererOptions; + gcodeOptions = sceneContext.RendererOptions; + + var buttonPanel = new FlowLayoutWidget() + { + HAnchor = HAnchor.Fit, + VAnchor = VAnchor.Fit + }; + + var buttonGroup = new ObservableCollection(); + + speedsButton = new RadioIconButton(AggContext.StaticData.LoadIcon("speeds.png", IconColor.Theme), theme) + { + SiblingRadioButtonList = buttonGroup, + Name = "Speeds Button", + Checked = gcodeOptions.GCodeLineColorStyle == "Speeds", + ToolTipText = "Show Speeds".Localize(), + Margin = theme.ButtonSpacing + }; + speedsButton.Click += SwitchColorModes_Click; + buttonGroup.Add(speedsButton); + + buttonPanel.AddChild(speedsButton); + + materialsButton = new RadioIconButton(AggContext.StaticData.LoadIcon("materials.png", IconColor.Theme), theme) + { + SiblingRadioButtonList = buttonGroup, + Name = "Materials Button", + Checked = gcodeOptions.GCodeLineColorStyle == "Materials", + ToolTipText = "Show Materials".Localize(), + Margin = theme.ButtonSpacing + }; + materialsButton.Click += SwitchColorModes_Click; + buttonGroup.Add(materialsButton); + + buttonPanel.AddChild(materialsButton); + + noColorButton = new RadioIconButton(AggContext.StaticData.LoadIcon("no-color.png", IconColor.Theme), theme) + { + SiblingRadioButtonList = buttonGroup, + Name = "No Color Button", + Checked = gcodeOptions.GCodeLineColorStyle == "None", + ToolTipText = "No Color".Localize(), + Margin = theme.ButtonSpacing + }; + noColorButton.Click += SwitchColorModes_Click; + buttonGroup.Add(noColorButton); + + buttonPanel.AddChild(noColorButton); + + this.AddChild( + new SettingsItem( + "Color View".Localize(), + theme.Colors.PrimaryTextColor, + buttonPanel, + enforceGutter: false)); + + buttonPanel = new FlowLayoutWidget() + { + HAnchor = HAnchor.Fit, + VAnchor = VAnchor.Fit + }; + + // Reset to new button group + buttonGroup = new ObservableCollection(); + + solidButton = new RadioIconButton(AggContext.StaticData.LoadIcon("solid.png", IconColor.Theme), theme) + { + SiblingRadioButtonList = buttonGroup, + Name = "Solid Button", + Checked = gcodeOptions.GCodeModelView == "Semi-Transparent", + ToolTipText = "Show Semi-Transparent Model".Localize(), + Margin = theme.ButtonSpacing + }; + solidButton.Click += SwitchModelModes_Click; + buttonGroup.Add(solidButton); + + buttonPanel.AddChild(solidButton); + + materialsButton = new RadioIconButton(AggContext.StaticData.LoadIcon("wireframe.png", IconColor.Theme), theme) + { + SiblingRadioButtonList = buttonGroup, + Name = "Wireframe Button", + Checked = gcodeOptions.GCodeModelView == "Wireframe", + ToolTipText = "Show Wireframe Model".Localize(), + Margin = theme.ButtonSpacing + }; + materialsButton.Click += SwitchModelModes_Click; + buttonGroup.Add(materialsButton); + + buttonPanel.AddChild(materialsButton); + + noColorButton = new RadioIconButton(AggContext.StaticData.LoadIcon("no-color.png", IconColor.Theme), theme) + { + SiblingRadioButtonList = buttonGroup, + Name = "No Model Button", + Checked = gcodeOptions.GCodeModelView == "None", + ToolTipText = "No Model".Localize(), + Margin = theme.ButtonSpacing + }; + noColorButton.Click += SwitchModelModes_Click; + buttonGroup.Add(noColorButton); + + buttonPanel.AddChild(noColorButton); + + this.AddChild( + new SettingsItem( + "Model View".Localize(), + theme.Colors.PrimaryTextColor, + buttonPanel, + enforceGutter: false)); var viewOptions = new[] { @@ -128,6 +245,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow this.AddChild( new SettingsItem( option.Title, + theme.Colors.PrimaryTextColor, new SettingsItem.ToggleSwitchConfig() { Checked = option.IsChecked(), @@ -138,6 +256,44 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } } + + private void SwitchColorModes_Click(object sender, MouseEventArgs e) + { + if (sender is GuiWidget widget) + { + if (widget.Name == "Speeds Button") + { + gcodeOptions.GCodeLineColorStyle = "Speeds"; + } + else if (widget.Name == "Materials Button") + { + gcodeOptions.GCodeLineColorStyle = "Materials"; + } + else + { + gcodeOptions.GCodeLineColorStyle = "None"; + } + } + } + + private void SwitchModelModes_Click(object sender, MouseEventArgs e) + { + if (sender is GuiWidget widget) + { + if (widget.Name == "Solid Button") + { + gcodeOptions.GCodeModelView = "Semi-Transparent"; + } + else if (widget.Name == "Wireframe Button") + { + gcodeOptions.GCodeModelView = "Wireframe"; + } + else + { + gcodeOptions.GCodeModelView = "None"; + } + } + } } public class GCodeDetailsView : FlowLayoutWidget diff --git a/StaticData/Icons/materials.png b/StaticData/Icons/materials.png new file mode 100644 index 0000000000000000000000000000000000000000..b0db4306f95c9ecbcd20116c3c8fe03cce604fd3 GIT binary patch literal 1058 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7r87e!N+NuHtdjF{^%7I^ zlT!66atjzhz{b9!ATc>RwL~E)H9a%WR_Xoj{Yna%DYi=CroINg16w1-Ypui3%0DIeEoa6}C!XbFK1lpi<;HsXMd|v6mX?*7iAWdWaj57fXqxx$}cUkRZ`LiS)vaT z3373>I-5Vg%`b1e8@YjPvX|HTj}BUMuQCbS z9e2vO82G(us#%VSfk;?MXMpPk4}tVqq1enhCMRr zS~G)BeK(B1B;$MjyyqLS_fF~uSnOnc4BO=O|Mr}CbM!1j?WRRu`s&9&4Hy_0I14-?iy0WWg+Z8+Vb&Z81_nlX zPZ!4!i{81H_v$+*iX8vwfBUSGkCMkO&z^tmC2C0vnUhR6d{P%syI3}@V&{AUD%i? z5^z|mZ-Z?1eb1Ml4Yc+?66#)&AaHu&8;0^7r<_X*|4gF;8wKh_F zza4pIsJEeATqkwPnguQ8Jqa>-i=OAS=1p0X%zQ42?V9cqv7>XhzuYSP#PiNA-ZipM zbmls~m7n0obz{nmC6||Hw@xYGb?xL&`^RB9F@j-D(!#?BHcg1_EZ(oIZWyqWTXpwB z3;)mYKYEVXop~tudzRmtB&NR-2XyQ%omv}s#751q<#)t;-W$%}K8Wj!hHa={BOndR N+Mcd{F6*2UngIDXrhNba literal 0 HcmV?d00001 diff --git a/StaticData/Icons/no-color.png b/StaticData/Icons/no-color.png new file mode 100644 index 0000000000000000000000000000000000000000..88a8283e4f198db20a30efb6a2c85dfc14b8fafc GIT binary patch literal 1027 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7r87e!N+NuHtdjF{^%7I^ zlT!66atjzhz{b9!ATc>RwL~E)H9a%WR_Xoj{Yna%DYi=CroINg16w1-Ypui3%0DIeEoa6}C!XbFK1lpi<;HsXMd|v6mX?*7iAWdWaj57fXqxx$}cUkRZ`LiS)vaT z3373>I-5Vg%`b1e8@YjPvX|HTj}BUMuQCbS z9e2vO82G(us#%VSfk;?MXMpPk4}tVqq1enhCMRr zS~G)BeK(B1B;$MjyyqLS_fF~uSnOnc4BO=O|Mr}CbM!1j?WRRu`s&9&4Hy_0I14-?iy0WWg+Z8+Vb&Z81_nk3 zPZ!4!i{7c14TBCP2(&#^-#_`FS`|~5$(b7*Mee9!CoR>LIglI?7{4(A3qnSr$*Gav&V;Qk?zkk@I@oQ_RcSYCtxm@o}jxGKX zbk9q!oz>WX+v-~~%^!Q(yRW|5Jn`Ow>AS4T4^*rEF_~YWG$*;XO}pmtYx}u|hg7$k zmi^hV?B5!}RgPX)I}PrvmgL-&=+#{iv3x3Xo@rcK_RE=TJ!c&^>D#DYx?^p0XEe{n h?i=ss#G9V`Demv$^J449MG>I9>*?y}vd$@?2>{9!o_hcQ literal 0 HcmV?d00001 diff --git a/StaticData/Icons/solid.png b/StaticData/Icons/solid.png new file mode 100644 index 0000000000000000000000000000000000000000..436cfe7fe6f509a2d661a7aaef607022baba26fb GIT binary patch literal 1088 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7r87e!N+NuHtdjF{^%7I^ zlT!66atjzhz{b9!ATc>RwL~E)H9a%WR_Xoj{Yna%DYi=CroINg16w1-Ypui3%0DIeEoa6}C!XbFK1lpi<;HsXMd|v6mX?*7iAWdWaj57fXqxx$}cUkRZ`LiS)vaT z3373>I-5Vg%`b1e8@YjPvX|HTj}BUMuQCbS z9e2vO82G(us#%VSfk;?MXMpPk4}tVqq1enhCMRr zS~G)BeK(B1B;$MjyyqLS_fF~uSnOnc4BO=O|Mr}CbM!1j?WRRu`s&9&4Hy_0I14-?iy0WWg+Z8+Vb&Z81_nl3 zPZ!4!i{7c14gEp`1&)1`7nc)h=xpuelwG*E$stGAM<>pFDjU~}2!@CqOhQs+3@R<> zk{22lii#cE!Ne`Tpx_=SKi50u>$9s}m(Th6tbX6gGY=aj_}bYm-mDI<&+hAZdobYx z+wX{9`VKC8j-0Hp*>}jq?!U2ulGz77p+H)pkczH-{h=Mw)IJ31m&)@*f`>UF#PRz^>4Z>UR% z#nEoQg>#C<9|)dP=j;2hYxT}DgBO~64@I@E-|>d|$(-K|!9OCFPVw8=`QDZRwL~E)H9a%WR_Xoj{Yna%DYi=CroINg16w1-Ypui3%0DIeEoa6}C!XbFK1lpi<;HsXMd|v6mX?*7iAWdWaj57fXqxx$}cUkRZ`LiS)vaT z3373>I-5Vg%`b1e8@YjPvX|HTj}BUMuQCbS z9e2vO82G(us#%VSfk;?MXMpPk4}tVqq1enhCMRr zS~G)BeK(B1B;$MjyyqLS_fF~uSnOnc4BO=O|Mr}CbM!1j?WRRu`s&9&4Hy_0I14-?iy0WWg+Z8+Vb&Z81_nkh zPZ!4!i{7)B7J46clsNYB{Ij})3T!iz1R@0l9WNwA1w?F#5;M8YVko)gr#lDRYU!r4 z83KkKJUnJcMO!`$q{+|L$9>=Te!us8=kA{OJ_~vzd)(eIn#w#dTgsNQ zp|$#q(!ru0l_b-gV{sF5wbw1^t9^3OMcGX_f5!o3zT5nbylal^l3yy)$}Q3NRqL9) zFl$T_zp|kBuAe<@);ru3n{#E_kJy|mXxX~qil^oi`$W!FnzF|Wgo@3DLVh1Q?R{c@ z_Y-Zuz>^m%o-bQmAy}-DR=Rv%a`^GwRwL~E)H9a%WR_Xoj{Yna%DYi=CroINg16w1-Ypui3%0DIeEoa6}C!XbFK1lpi<;HsXMd|v6mX?*7iAWdWaj57fXqxx$}cUkRZ`LiS)vaT z3373>I-5Vg%`b1e8@YjPvX|HTj}BUMuQCbS z9e2vO82G(us#%VSfk;?MXMpPk4}tVqq1enhCMRr zS~G)BeK(B1B;$MjyyqLS_fF~uSnOnc4BO=O|Mr}CbM!1j?WRRu`s&9&4Hy_0I14-?iy0WWg+Z8+Vb&Z81_s6o zPZ!4!i{94DwmD}5WsZIH&lmohm#|>-1p98r=3bMR|IP^UWC=8#ZCJ{@D~yLtMaAjQ z9v7E2V%*&((`U4_Y}`0w%EN!!*Wc#;_C8m1?sLug;<&oSVJlUh&t7)(;@dKNzG(T# zqctMaHwgNM{*}2>5@z84NXjo+CcOQn+jPVC$7^MdF!d$GUpC3#efQmUQDK#vo$70U zT3>s}eeO}%B-7JOlX8x0`-EKWFRRjh_EBPfVWEb?NwqykI#>O=vRv|TP3Yf?yZenj zXZ>f$U2~{(kEF%bB&N`>yy3SN_c*9~vX_65;$M~ZA?hFFtz9?sYO)Lu^3)}!bx2_f{m>(J8WtTw(zQ&R*sER~;-59k=u6z5eaTYoU+?{ulY1m%mb_}!J^fehX2Fy8 zROWuvl^LF{elF{r5}E+u CoYXu3 literal 0 HcmV?d00001