From bfbc4bf3a704fbc003615b04d43b7a67f8e70175 Mon Sep 17 00:00:00 2001 From: jlewin Date: Thu, 16 May 2019 16:53:47 -0700 Subject: [PATCH] Add missing file --- .../ControlWidgets/FanControlsRow.cs | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 MatterControlLib/PrinterControls/ControlWidgets/FanControlsRow.cs diff --git a/MatterControlLib/PrinterControls/ControlWidgets/FanControlsRow.cs b/MatterControlLib/PrinterControls/ControlWidgets/FanControlsRow.cs new file mode 100644 index 000000000..3b81fba92 --- /dev/null +++ b/MatterControlLib/PrinterControls/ControlWidgets/FanControlsRow.cs @@ -0,0 +1,133 @@ +/* +Copyright (c) 2017, Kevin Pope, John Lewin +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of the FreeBSD Project. +*/ + +using System; +using System.Diagnostics; +using MatterHackers.Agg; +using MatterHackers.Agg.UI; +using MatterHackers.Localizations; +using MatterHackers.MatterControl.CustomWidgets; + +namespace MatterHackers.MatterControl.PrinterControls +{ + public class FanControlsRow : SettingsRow + { + private MHNumberEdit fanSpeedDisplay; + + private RoundedToggleSwitch toggleSwitch; + private PrinterConfig printer; + + public FanControlsRow(PrinterConfig printer, ThemeConfig theme) + : base ("Part Cooling Fan".Localize(), null, theme, fullRowSelect: true) + { + this.printer = printer; + + var timeSinceLastManualSend = new Stopwatch(); + + var container = new FlowLayoutWidget(); + this.AddChild(container); + this.BorderColor = Color.Transparent; + + fanSpeedDisplay = new MHNumberEdit(0, theme, minValue: 0, maxValue: 100, pixelWidth: 30) + { + Value = printer.Connection.FanSpeed0To255 * 100 / 255, + VAnchor = VAnchor.Center | VAnchor.Fit, + Margin = new BorderDouble(right: 2), + }; + fanSpeedDisplay.ActuallNumberEdit.EditComplete += (sender, e) => + { + // limit the rate we can send this message to 2 per second so we don't get in a crazy toggle state. + if (!timeSinceLastManualSend.IsRunning + || timeSinceLastManualSend.ElapsedMilliseconds > 500) + { + timeSinceLastManualSend.Restart(); + printer.Connection.FanSpeed0To255 = (int)(fanSpeedDisplay.Value * 255 / 100 + .5); + } + }; + container.AddChild(fanSpeedDisplay); + + container.Selectable = true; + + // put in % + container.AddChild(new TextWidget("%", pointSize: 10, textColor: theme.TextColor) + { + VAnchor = VAnchor.Center + }); + + toggleSwitch = new RoundedToggleSwitch(theme) + { + Margin = new BorderDouble(5, 0), + VAnchor = VAnchor.Center + }; + toggleSwitch.CheckedStateChanged += (s, e) => + { + if (!timeSinceLastManualSend.IsRunning + || timeSinceLastManualSend.ElapsedMilliseconds > 500) + { + timeSinceLastManualSend.Restart(); + if (toggleSwitch.Checked) + { + printer.Connection.FanSpeed0To255 = 255; + } + else + { + printer.Connection.FanSpeed0To255 = 0; + } + } + }; + container.AddChild(toggleSwitch); + this.ActionWidget = toggleSwitch; + + // Register listeners + printer.Connection.FanSpeedSet += Connection_FanSpeedSet; + } + + public override void OnClosed(EventArgs e) + { + // Unregister listeners + printer.Connection.FanSpeedSet -= Connection_FanSpeedSet; + + base.OnClosed(e); + } + + private void Connection_FanSpeedSet(object s, EventArgs e) + { + if ((int)printer.Connection.FanSpeed0To255 > 0) + { + toggleSwitch.Checked = true; + } + else + { + toggleSwitch.Checked = false; + } + + fanSpeedDisplay.Value = printer.Connection.FanSpeed0To255 * 100 / 255; + } + } +} \ No newline at end of file