diff --git a/ApplicationView/AdvancedControlsPanel.cs b/ApplicationView/AdvancedControlsPanel.cs index 54057f726..6a34ce137 100644 --- a/ApplicationView/AdvancedControlsPanel.cs +++ b/ApplicationView/AdvancedControlsPanel.cs @@ -121,7 +121,7 @@ namespace MatterHackers.MatterControl ScrollableWidget manualPrinterControlsScrollArea = new ScrollableWidget(true); manualPrinterControlsScrollArea.ScrollArea.HAnchor |= HAnchor.ParentLeftRight; manualPrinterControlsScrollArea.AnchorAll(); - manualPrinterControlsScrollArea.AddChild(manualPrinterControls); + //manualPrinterControlsScrollArea.AddChild(manualPrinterControls); RGBA_Bytes unselectedTextColor = ActiveTheme.Instance.TabLabelUnselected; @@ -138,7 +138,7 @@ namespace MatterHackers.MatterControl var sliceSettingPopOut = new PopOutTextTabWidget(sliceSettingsTabPage, SliceSettingsTabName, new Vector2(590, 400), textSize); advancedControls.AddTab(sliceSettingPopOut); - var controlsTabPage = new TabPage(manualPrinterControlsScrollArea, "Controls".Localize().ToUpper()); + var controlsTabPage = new TabPage(manualPrinterControls, "Controls".Localize().ToUpper()); var controlsPopOut = new PopOutTextTabWidget(controlsTabPage, ControlsTabName, new Vector2(400, 300), textSize); advancedControls.AddTab(controlsPopOut); diff --git a/ApplicationView/TouchscreenTabView.cs b/ApplicationView/TouchscreenTabView.cs index 54c11e327..62b9aaf1d 100644 --- a/ApplicationView/TouchscreenTabView.cs +++ b/ApplicationView/TouchscreenTabView.cs @@ -183,14 +183,6 @@ namespace MatterHackers.MatterControl "Options".Localize().ToUpper(), () => new PrinterConfigurationScrollWidget()); - if (!simpleMode) - { - this.AddTab( - "Terminal Tab", - "Console".Localize().ToUpper(), - () => new TerminalWidget(false)); - } - this.AddTab( "About Tab", "About".Localize().ToUpper(), diff --git a/PrinterControls/ControlWidgets/MacroControls.cs b/PrinterControls/ControlWidgets/MacroControls.cs index 32daddf7f..97e1a98bb 100644 --- a/PrinterControls/ControlWidgets/MacroControls.cs +++ b/PrinterControls/ControlWidgets/MacroControls.cs @@ -50,6 +50,19 @@ namespace MatterHackers.MatterControl.PrinterControls } } + public class TerminalControls : ControlWidgetBase + { + public TerminalControls() + { + if (!ActiveSliceSettings.Instance.ActionMacros().Any()) + { + Margin = new BorderDouble(); + return; + } + this.AddChild(new TerminalWidget(false)); + } + } + public class ActionControlsWidget : FlowLayoutWidget { protected string editWindowLabel; diff --git a/PrinterControls/ManualPrinterControls.cs b/PrinterControls/ManualPrinterControls.cs index a9b236de5..d16e204e6 100644 --- a/PrinterControls/ManualPrinterControls.cs +++ b/PrinterControls/ManualPrinterControls.cs @@ -35,15 +35,43 @@ using MatterHackers.MatterControl.PrinterControls; using MatterHackers.MatterControl.SlicerConfiguration; using System; using System.Linq; +using MatterHackers.Localizations; namespace MatterHackers.MatterControl { - public class ManualPrinterControls : ScrollableWidget + public class ManualPrinterControls : GuiWidget { static public RootedObjectEventHandler AddPluginControls = new RootedObjectEventHandler(); - private static bool pluginsQueuedToAdd = false; + public void AddPlugins() + { + AddPluginControls.CallEvents(this, null); + pluginsQueuedToAdd = false; + } + + public ManualPrinterControls() + { + AnchorAll(); + if (UserSettings.Instance.IsTouchScreen) + { + AddChild(new ManualPrinterControlsTouchScreen()); + } + else + { + AddChild(new ManualPrinterControlsDesktop()); + } + + if (!pluginsQueuedToAdd && ActiveSliceSettings.Instance.GetValue("include_firmware_updater") == "Simple Arduino") + { + UiThread.RunOnIdle(AddPlugins); + pluginsQueuedToAdd = true; + } + } + } + + public class ManualPrinterControlsDesktop : ScrollableWidget + { private DisableableWidget fanControlsContainer; private DisableableWidget macroControlsContainer; @@ -57,14 +85,15 @@ namespace MatterHackers.MatterControl private DisableableWidget tuningAdjustmentControlsContainer; - public ManualPrinterControls() + public ManualPrinterControlsDesktop() { ScrollArea.HAnchor |= Agg.UI.HAnchor.ParentLeftRight; BackgroundColor = ActiveTheme.Instance.TertiaryBackgroundColor; AnchorAll(); AutoScroll = true; - SetDisplayAttributes(); + HAnchor = HAnchor.Max_FitToChildren_ParentWidth; + VAnchor = VAnchor.ParentBottomTop; FlowLayoutWidget controlsTopToBottomLayout = new FlowLayoutWidget(FlowDirection.TopToBottom); controlsTopToBottomLayout.HAnchor = Agg.UI.HAnchor.Max_FitToChildren_ParentWidth; @@ -91,20 +120,9 @@ namespace MatterHackers.MatterControl AddChild(controlsTopToBottomLayout); AddHandlers(); SetVisibleControls(); - - if (!pluginsQueuedToAdd && ActiveSliceSettings.Instance.GetValue("include_firmware_updater") == "Simple Arduino") - { - UiThread.RunOnIdle(AddPlugins); - pluginsQueuedToAdd = true; - } } private EventHandler unregisterEvents; - public void AddPlugins() - { - AddPluginControls.CallEvents(this, null); - pluginsQueuedToAdd = false; - } public override void OnClosed(ClosedEventArgs e) { @@ -172,12 +190,6 @@ namespace MatterHackers.MatterControl UiThread.RunOnIdle(invalidateWidget); } - private void SetDisplayAttributes() - { - HAnchor = Agg.UI.HAnchor.Max_FitToChildren_ParentWidth; - VAnchor = Agg.UI.VAnchor.FitToChildren; - } - private void SetVisibleControls() { if (!ActiveSliceSettings.Instance.PrinterSelected) @@ -313,4 +325,314 @@ namespace MatterHackers.MatterControl } } } -} \ No newline at end of file + + public class ManualPrinterControlsTouchScreen : TabControl + { + event EventHandler unregisterEvents; + + TemperatureControls temperatureControlsContainer; + MovementControls movementControlsContainer; + DisableableWidget fanControlsContainer; + DisableableWidget tuningAdjustmentControlsContainer; + DisableableWidget terminalControlsContainer; + DisableableWidget macroControlsContainer; + DisableableWidget actionControlsContainer; + + int TabTextSize; + + TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory(); + + public ManualPrinterControlsTouchScreen() + : base(Orientation.Vertical) + { + RGBA_Bytes unselectedTextColor = ActiveTheme.Instance.TabLabelUnselected; + + this.TabBar.BackgroundColor = ActiveTheme.Instance.TransparentLightOverlay; + this.TabBar.BorderColor = new RGBA_Bytes(0, 0, 0, 0); + this.TabBar.Margin = new BorderDouble(0); + this.TabBar.Padding = new BorderDouble(4, 4); + + this.AnchorAll(); + this.VAnchor |= VAnchor.FitToChildren; + + this.Margin = new BorderDouble(0); + this.TabTextSize = 13; + + // add action tab + { + GuiWidget actionContainerContainer = new GuiWidget(); + actionContainerContainer.Padding = new BorderDouble(6); + actionContainerContainer.AnchorAll(); + + actionControlsContainer = new ActionControls(); + actionControlsContainer.VAnchor = VAnchor.ParentTop; + if (ActiveSliceSettings.Instance.ActionMacros().Any()) + { + actionContainerContainer.AddChild(actionControlsContainer); + } + + if (ActiveSliceSettings.Instance.ActionMacros().Any()) + { + TabPage actionTabPage = new TabPage(actionContainerContainer, "Actions".Localize().ToUpper()); + this.AddTab(new SimpleTextTabWidget(actionTabPage, "Actions Tab", TabTextSize, + ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes())); + } + } + + // add temperature tab + { + GuiWidget temperatureContainerContainer = new GuiWidget(); + temperatureContainerContainer.Padding = new BorderDouble(6); + temperatureContainerContainer.AnchorAll(); + + temperatureControlsContainer = new TemperatureControls(); + temperatureControlsContainer.VAnchor = VAnchor.ParentTop; + + temperatureContainerContainer.AddChild(temperatureControlsContainer); + + TabPage temperatureTabPage = new TabPage(temperatureContainerContainer, "Temperature".Localize().ToUpper()); + this.AddTab(new SimpleTextTabWidget(temperatureTabPage, "Temperature Tab", TabTextSize, + ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes())); + } + + // add movement tab + { + GuiWidget movementContainerContainer = new GuiWidget(); + movementContainerContainer.Padding = new BorderDouble(6); + movementContainerContainer.AnchorAll(); + + movementControlsContainer = new MovementControls(); + movementControlsContainer.VAnchor = VAnchor.ParentTop; + + movementContainerContainer.AddChild(movementControlsContainer); + + TabPage movementTabPage = new TabPage(movementContainerContainer, "Movement".Localize().ToUpper()); + this.AddTab(new SimpleTextTabWidget(movementTabPage, "Movement Tab", TabTextSize, + ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes())); + } + + // add macro tab + { + GuiWidget macrosContainerContainer = new GuiWidget(); + macrosContainerContainer.Padding = new BorderDouble(6); + macrosContainerContainer.AnchorAll(); + + macroControlsContainer = new MacroControls(); + macroControlsContainer.VAnchor |= VAnchor.ParentTop; + macrosContainerContainer.AddChild(macroControlsContainer); + + + TabPage macrosTabPage = new TabPage(macrosContainerContainer, "Macros".Localize().ToUpper()); + this.AddTab(new SimpleTextTabWidget(macrosTabPage, "Macros Tab", TabTextSize, + ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes())); + } + + if (ActiveSliceSettings.Instance.GetValue("has_fan")) + { + // add fan tab + GuiWidget fanContainerContainer = new GuiWidget(); + fanContainerContainer.Padding = new BorderDouble(6); + fanContainerContainer.AnchorAll(); + + fanControlsContainer = new FanControls(); + fanControlsContainer.VAnchor = VAnchor.ParentTop; + + fanContainerContainer.AddChild(fanControlsContainer); + + TabPage fanTabPage = new TabPage(fanContainerContainer, "Fan Controls".Localize().ToUpper()); + this.AddTab(new SimpleTextTabWidget(fanTabPage, "Fan Controls Tab", TabTextSize, + ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes())); + } + + // add tunning tab + { + GuiWidget tuningContainerContainer = new GuiWidget(); + tuningContainerContainer.Padding = new BorderDouble(6); + tuningContainerContainer.AnchorAll(); + + tuningAdjustmentControlsContainer = new AdjustmentControls(); + tuningAdjustmentControlsContainer.VAnchor = VAnchor.ParentTop; + + tuningContainerContainer.AddChild(tuningAdjustmentControlsContainer); + + TabPage tuningTabPage = new TabPage(tuningContainerContainer, "Tuning Adjust".Localize().ToUpper()); + this.AddTab(new SimpleTextTabWidget(tuningTabPage, "Tuning Tab", TabTextSize, + ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes())); + } + + // add terminal tab + { + GuiWidget terminalContainerContainer = new GuiWidget(); + terminalContainerContainer.Padding = new BorderDouble(6); + terminalContainerContainer.AnchorAll(); + + terminalControlsContainer = new TerminalControls(); + terminalControlsContainer.VAnchor |= VAnchor.ParentBottomTop; + terminalControlsContainer.DebugShowBounds = true; + + terminalContainerContainer.AddChild(terminalControlsContainer); + + TabPage terminalTabPage = new TabPage(terminalContainerContainer, "Terminal".Localize().ToUpper()); + this.AddTab(new SimpleTextTabWidget(terminalTabPage, "Terminal Tab", TabTextSize, + ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes())); + } + + PrinterConnectionAndCommunication.Instance.CommunicationStateChanged.RegisterEvent(onPrinterStatusChanged, ref unregisterEvents); + PrinterConnectionAndCommunication.Instance.EnableChanged.RegisterEvent(onPrinterStatusChanged, ref unregisterEvents); + + SetVisibleControls(); + } + + public override void OnClosed(ClosedEventArgs e) + { + unregisterEvents?.Invoke(this, null); + + base.OnClosed(e); + } + + private void SetVisibleControls() + { + if (ActiveSliceSettings.Instance == null) + { + // no printer selected + foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) + { + extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + } + temperatureControlsContainer.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + movementControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + fanControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + tuningAdjustmentControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + + macroControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + actionControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + } + else // we at least have a printer selected + { + switch (PrinterConnectionAndCommunication.Instance.CommunicationState) + { + case PrinterConnectionAndCommunication.CommunicationStates.Disconnecting: + case PrinterConnectionAndCommunication.CommunicationStates.ConnectionLost: + case PrinterConnectionAndCommunication.CommunicationStates.Disconnected: + case PrinterConnectionAndCommunication.CommunicationStates.AttemptingToConnect: + case PrinterConnectionAndCommunication.CommunicationStates.FailedToConnect: + foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) + { + extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); + } + temperatureControlsContainer.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); + movementControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); + fanControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + tuningAdjustmentControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + macroControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); + actionControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + + foreach (var widget in movementControlsContainer.DisableableWidgets) + { + widget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + } + movementControlsContainer.jogControls.EnableBabystepping(false); + + break; + + case PrinterConnectionAndCommunication.CommunicationStates.FinishedPrint: + case PrinterConnectionAndCommunication.CommunicationStates.Connected: + foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) + { + extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + } + temperatureControlsContainer.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + movementControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + fanControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + macroControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + actionControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + tuningAdjustmentControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + + foreach (var widget in movementControlsContainer.DisableableWidgets) + { + widget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + } + movementControlsContainer.jogControls.EnableBabystepping(false); + + break; + + case PrinterConnectionAndCommunication.CommunicationStates.PrintingFromSd: + foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) + { + extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + } + temperatureControlsContainer.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + movementControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); + fanControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + macroControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); + actionControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + tuningAdjustmentControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + break; + + case PrinterConnectionAndCommunication.CommunicationStates.PreparingToPrint: + case PrinterConnectionAndCommunication.CommunicationStates.Printing: + switch (PrinterConnectionAndCommunication.Instance.PrintingState) + { + case PrinterConnectionAndCommunication.DetailedPrintingState.HomingAxis: + case PrinterConnectionAndCommunication.DetailedPrintingState.HeatingBed: + case PrinterConnectionAndCommunication.DetailedPrintingState.HeatingExtruder: + case PrinterConnectionAndCommunication.DetailedPrintingState.Printing: + foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) + { + extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + } + temperatureControlsContainer.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + fanControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + tuningAdjustmentControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + macroControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); + actionControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + + + foreach (var widget in movementControlsContainer.DisableableWidgets) + { + widget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + } + + movementControlsContainer.jogControls.EnableBabystepping(true); + + break; + + default: + throw new NotImplementedException(); + } + break; + + case PrinterConnectionAndCommunication.CommunicationStates.Paused: + foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) + { + extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + } + temperatureControlsContainer.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + movementControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + fanControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + tuningAdjustmentControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + macroControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + actionControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + tuningAdjustmentControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + + foreach (var widget in movementControlsContainer.DisableableWidgets) + { + widget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + } + movementControlsContainer.jogControls.EnableBabystepping(false); + + break; + + default: + throw new NotImplementedException(); + } + } + } + + private void onPrinterStatusChanged(object sender, EventArgs e) + { + SetVisibleControls(); + UiThread.RunOnIdle(this.Invalidate); + } + } +} diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index 6a54fdb9d..809bdb305 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -5959,3 +5959,6 @@ Translated:Bed English:Axis movement speeds Translated:Axis movement speeds +English:Tuning Adjust +Translated:Tuning Adjust +