From c593396647cbc5ce41eba187d80e799115a8d6b2 Mon Sep 17 00:00:00 2001 From: kevinepope Date: Sun, 22 Jun 2014 20:53:38 -0700 Subject: [PATCH] Added device type to Printer model. Refactoring changes. --- ApplicationView/MainApplicationWidget.cs | 6 + ConfigurationPage/PrinterConfigurationPage.cs | 179 ++++++++++++++---- DataStorage/Models.cs | 2 + MatterControl.sln | 19 +- .../PrinterConnectionAndCommunication.cs | 27 +++ .../Icons/PrintStatusControls/cloud-24x24.png | Bin 0 -> 425 bytes StaticData/Translations/Master.txt | 9 + 7 files changed, 205 insertions(+), 37 deletions(-) create mode 100644 StaticData/Icons/PrintStatusControls/cloud-24x24.png diff --git a/ApplicationView/MainApplicationWidget.cs b/ApplicationView/MainApplicationWidget.cs index e7489a506..c52954789 100644 --- a/ApplicationView/MainApplicationWidget.cs +++ b/ApplicationView/MainApplicationWidget.cs @@ -54,6 +54,7 @@ namespace MatterHackers.MatterControl { static ApplicationWidget globalInstance; public RootedObjectEventHandler ReloadPanelTrigger = new RootedObjectEventHandler(); + public RootedObjectEventHandler CloudSyncStatusChanged = new RootedObjectEventHandler(); public SlicePresetsWindow EditSlicePresetsWindow { get; set;} @@ -125,5 +126,10 @@ namespace MatterHackers.MatterControl { ReloadPanelTrigger.CallEvents(this, null); } + + public void ChangeCloudSyncStatus() + { + CloudSyncStatusChanged.CallEvents(this, null); + } } } diff --git a/ConfigurationPage/PrinterConfigurationPage.cs b/ConfigurationPage/PrinterConfigurationPage.cs index 9f6a6e601..53102b217 100644 --- a/ConfigurationPage/PrinterConfigurationPage.cs +++ b/ConfigurationPage/PrinterConfigurationPage.cs @@ -60,10 +60,13 @@ namespace MatterHackers.MatterControl Button enablePrintLevelingButton; Button disablePrintLevelingButton; + Button enableCloudMonitorButton; + Button disableCloudMonitorButton; DisableableWidget eePromControlsContainer; DisableableWidget terminalCommunicationsContainer; - DisableableWidget printLevelContainer; + DisableableWidget cloudMonitorContainer; + DisableableWidget printLevelingContainer; TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory(); @@ -100,6 +103,7 @@ namespace MatterHackers.MatterControl mainLayoutContainer.AddChild(terminalControls); AddPrintLevelingControls(mainLayoutContainer); + AddCloudMonitorControls(mainLayoutContainer); mainLayoutContainer.AddChild(settingsControls); //mainLayoutContainer.AddChild(releaseControls); @@ -275,12 +279,12 @@ namespace MatterHackers.MatterControl UserSettings.Instance.set("UpdateFeedType", releaseCode); } } - + private void AddTerminalControls(FlowLayoutWidget controlsTopToBottomLayout) { GroupBox terminalControlsContainer; terminalControlsContainer = new GroupBox(LocalizedString.Get("Communications")); - + terminalControlsContainer.Margin = new BorderDouble(0); terminalControlsContainer.TextColor = ActiveTheme.Instance.PrimaryTextColor; terminalControlsContainer.BorderColor = ActiveTheme.Instance.PrimaryTextColor; @@ -320,8 +324,100 @@ namespace MatterHackers.MatterControl terminalCommunicationsContainer.AddChild(terminalControlsContainer); controlsTopToBottomLayout.AddChild(terminalCommunicationsContainer); + } + + private static GuiWidget CreateSeparatorLine() + { + GuiWidget topLine = new GuiWidget(10, 1); + topLine.Margin = new BorderDouble(0, 5); + topLine.HAnchor = Agg.UI.HAnchor.ParentLeftRight; + topLine.BackgroundColor = RGBA_Bytes.White; + return topLine; } + public override void OnClosed(EventArgs e) + { + if (unregisterEvents != null) + { + unregisterEvents(this, null); + } + + base.OnClosed(e); + } + + TextWidget cloudMonitorStatusLabel; + private void AddCloudMonitorControls(FlowLayoutWidget controlsTopToBottomLayout) + { + cloudMonitorContainer = new DisableableWidget(); + cloudMonitorContainer.AddChild(CreateCloudMonitorControls()); + controlsTopToBottomLayout.AddChild(cloudMonitorContainer); + } + + private GuiWidget CreateCloudMonitorControls() + { + + GroupBox cloudMonitorContainer = new GroupBox(LocalizedString.Get("Cloud Services")); + + cloudMonitorContainer.Margin = new BorderDouble(0); + cloudMonitorContainer.TextColor = ActiveTheme.Instance.PrimaryTextColor; + cloudMonitorContainer.BorderColor = ActiveTheme.Instance.PrimaryTextColor; + cloudMonitorContainer.HAnchor = Agg.UI.HAnchor.ParentLeftRight; + cloudMonitorContainer.Height = 68; + + { + FlowLayoutWidget buttonBar = new FlowLayoutWidget(); + buttonBar.HAnchor |= HAnchor.ParentLeftRight; + buttonBar.VAnchor |= Agg.UI.VAnchor.ParentCenter; + buttonBar.Margin = new BorderDouble(0, 0, 0, 0); + buttonBar.Padding = new BorderDouble(0); + + this.textImageButtonFactory.FixedHeight = TallButtonHeight; + + Agg.Image.ImageBuffer cloudMonitorImage = new Agg.Image.ImageBuffer(); + ImageIO.LoadImageData(Path.Combine(ApplicationDataStorage.Instance.ApplicationStaticDataPath, "Icons", "PrintStatusControls", "cloud-24x24.png"), cloudMonitorImage); + if (!ActiveTheme.Instance.IsDarkTheme) + { + InvertLightness.DoInvertLightness(cloudMonitorImage); + } + + ImageWidget levelingIcon = new ImageWidget(cloudMonitorImage); + levelingIcon.Margin = new BorderDouble(right: 6); + + enableCloudMonitorButton = textImageButtonFactory.Generate("Enable".Localize().ToUpper()); + enableCloudMonitorButton.Margin = new BorderDouble(left: 6); + enableCloudMonitorButton.VAnchor = VAnchor.ParentCenter; + enableCloudMonitorButton.Click += new ButtonBase.ButtonEventHandler(enableCloudMonitor_Click); + + disableCloudMonitorButton = textImageButtonFactory.Generate("Disable".Localize().ToUpper()); + disableCloudMonitorButton.Margin = new BorderDouble(left: 6); + disableCloudMonitorButton.VAnchor = VAnchor.ParentCenter; + disableCloudMonitorButton.Click += new ButtonBase.ButtonEventHandler(disableCloudMonitor_Click); + + cloudMonitorStatusLabel = new TextWidget(""); + cloudMonitorStatusLabel.AutoExpandBoundsToText = true; + cloudMonitorStatusLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor; + cloudMonitorStatusLabel.VAnchor = VAnchor.ParentCenter; + + GuiWidget hSpacer = new GuiWidget(); + hSpacer.HAnchor = HAnchor.ParentLeftRight; + + buttonBar.AddChild(levelingIcon); + buttonBar.AddChild(cloudMonitorStatusLabel); + buttonBar.AddChild(hSpacer); + buttonBar.AddChild(enableCloudMonitorButton); + buttonBar.AddChild(disableCloudMonitorButton); + ActivePrinterProfile.Instance.DoPrintLevelingChanged.RegisterEvent((sender, e) => + { + SetCloudButtonVisiblity(); + + }, ref unregisterEvents); + + cloudMonitorContainer.AddChild(buttonBar); + } + SetCloudButtonVisiblity(); + return cloudMonitorContainer; + } + string noEepromMappingMessage = "Oops! There is no eeprom mapping for your printer's firmware.".Localize(); string noEepromMappingTitle = "Warning no eeprom mapping".Localize(); string groupBoxTitle = "EEProm Settings".Localize(); @@ -385,34 +481,16 @@ namespace MatterHackers.MatterControl controlsTopToBottomLayout.AddChild(eePromControlsContainer); } - - private static GuiWidget CreateSeparatorLine() - { - GuiWidget topLine = new GuiWidget(10, 1); - topLine.Margin = new BorderDouble(0, 5); - topLine.HAnchor = Agg.UI.HAnchor.ParentLeftRight; - topLine.BackgroundColor = RGBA_Bytes.White; - return topLine; - } - SystemWindow printLevelWizardWindow; - - public override void OnClosed(EventArgs e) - { - if (unregisterEvents != null) - { - unregisterEvents(this, null); - } - - base.OnClosed(e); - } + SystemWindow printLevelWizardWindow; TextWidget printLevelingStatusLabel; + private void AddPrintLevelingControls(FlowLayoutWidget controlsTopToBottomLayout) { - printLevelContainer = new DisableableWidget(); - printLevelContainer.AddChild(CreatePrintLevelingControlsContainer()); - controlsTopToBottomLayout.AddChild(printLevelContainer); + printLevelingContainer = new DisableableWidget(); + printLevelingContainer.AddChild(CreatePrintLevelingControlsContainer()); + controlsTopToBottomLayout.AddChild(printLevelingContainer); } EditLevelingSettingsWindow editLevelingSettingsWindow; @@ -536,12 +614,13 @@ namespace MatterHackers.MatterControl private void SetVisibleControls() { + cloudMonitorContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); if (ActivePrinterProfile.Instance.ActivePrinter == null) { // no printer selected eePromControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); terminalCommunicationsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); - printLevelContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + printLevelingContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); } else // we at least have a printer selected { @@ -553,14 +632,14 @@ namespace MatterHackers.MatterControl case PrinterConnectionAndCommunication.CommunicationStates.AttemptingToConnect: case PrinterConnectionAndCommunication.CommunicationStates.FailedToConnect: eePromControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); - printLevelContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + printLevelingContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); terminalCommunicationsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); break; case PrinterConnectionAndCommunication.CommunicationStates.FinishedPrint: case PrinterConnectionAndCommunication.CommunicationStates.Connected: eePromControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); - printLevelContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + printLevelingContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); terminalCommunicationsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); break; @@ -574,7 +653,7 @@ namespace MatterHackers.MatterControl case PrinterConnectionAndCommunication.DetailedPrintingState.Printing: eePromControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); - printLevelContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + printLevelingContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); terminalCommunicationsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); break; @@ -585,7 +664,7 @@ namespace MatterHackers.MatterControl case PrinterConnectionAndCommunication.CommunicationStates.Paused: eePromControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); - printLevelContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + printLevelingContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); terminalCommunicationsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); break; @@ -616,16 +695,46 @@ namespace MatterHackers.MatterControl //this.Invalidate(); } - void enablePrintLeveling_Click(object sender, MouseEventArgs mouseEvent) + void enableCloudMonitor_Click(object sender, MouseEventArgs mouseEvent) { - ActivePrinterProfile.Instance.DoPrintLeveling = true; + UserSettings.Instance.set("CloudMonitorEnabled","true"); + ApplicationWidget.Instance.ChangeCloudSyncStatus(); + ApplicationWidget.Instance.ReloadAdvancedControlsPanel(); } - void disablePrintLeveling_Click(object sender, MouseEventArgs mouseEvent) + void disableCloudMonitor_Click(object sender, MouseEventArgs mouseEvent) { - ActivePrinterProfile.Instance.DoPrintLeveling = false; + UserSettings.Instance.set("CloudMonitorEnabled", "false"); + ApplicationWidget.Instance.ChangeCloudSyncStatus(); + ApplicationWidget.Instance.ReloadAdvancedControlsPanel(); } + void enablePrintLeveling_Click(object sender, MouseEventArgs mouseEvent) + { + ActivePrinterProfile.Instance.DoPrintLeveling = true; + } + + void disablePrintLeveling_Click(object sender, MouseEventArgs mouseEvent) + { + ActivePrinterProfile.Instance.DoPrintLeveling = false; + } + + void SetCloudButtonVisiblity() + { + bool cloudMontitorEnabled = (UserSettings.Instance.get("CloudMonitorEnabled") == "true"); + enableCloudMonitorButton.Visible = !cloudMontitorEnabled; + disableCloudMonitorButton.Visible = cloudMontitorEnabled; + + if (cloudMontitorEnabled) + { + cloudMonitorStatusLabel.Text = LocalizedString.Get("Cloud Monitoring (enabled)"); + } + else + { + cloudMonitorStatusLabel.Text = LocalizedString.Get("Cloud Monitoring (disabled)"); + } + } + void SetPrintLevelButtonVisiblity() { enablePrintLevelingButton.Visible = !ActivePrinterProfile.Instance.DoPrintLeveling; diff --git a/DataStorage/Models.cs b/DataStorage/Models.cs index 0a60b9a0b..aa6652e7f 100644 --- a/DataStorage/Models.cs +++ b/DataStorage/Models.cs @@ -300,6 +300,8 @@ namespace MatterHackers.MatterControl.DataStorage public string ComPort { get; set; } public string BaudRate { get; set; } public bool AutoConnectFlag { get; set; } //Auto connect to printer (if available) + public string DeviceToken { get; set; } + public string DeviceType { get; set; } // all the data about print leveling public bool DoPrintLeveling { get; set; } diff --git a/MatterControl.sln b/MatterControl.sln index 72d03c732..ad39150e8 100644 --- a/MatterControl.sln +++ b/MatterControl.sln @@ -1,6 +1,6 @@  -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MatterControl", "MatterControl.csproj", "{0B8D6F56-BD7F-4426-B858-D9292B084656}" ProjectSection(ProjectDependencies) = postProject {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B} = {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B} @@ -68,6 +68,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MatterRepair", "..\MatterRe EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PlatformAbstract", "..\agg-sharp\PlatformAbstract\PlatformAbstract.csproj", "{3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CloudServices", "..\CloudServicesPlugin\CloudServices\CloudServices.csproj", "{6782BF37-8139-4DC6-885E-98D22D1FB258}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -480,6 +482,18 @@ Global {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release64|Any CPU.Build.0 = Release64|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release64|x64.ActiveCfg = Release64|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release64|x86.ActiveCfg = Release64|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug|x64.ActiveCfg = Debug|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug|x86.ActiveCfg = Debug|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release|Any CPU.Build.0 = Release|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release|x64.ActiveCfg = Release|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release|x86.ActiveCfg = Release|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release64|Any CPU.ActiveCfg = Release|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release64|Any CPU.Build.0 = Release|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release64|x64.ActiveCfg = Release|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release64|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -491,6 +505,7 @@ Global {BEC6FD13-C765-4B90-836B-53823AC12E20} = {DA2BE4E5-5FB2-4C74-9170-0D2513AAFC84} {A3680C51-A549-4D1F-AEA5-3931EA755E9A} = {DA2BE4E5-5FB2-4C74-9170-0D2513AAFC84} {DA4A9C04-C54A-4571-B6B0-957C7E6E868B} = {DA2BE4E5-5FB2-4C74-9170-0D2513AAFC84} + {6782BF37-8139-4DC6-885E-98D22D1FB258} = {DA2BE4E5-5FB2-4C74-9170-0D2513AAFC84} EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution StartupItem = MatterControl.csproj diff --git a/PrinterCommunication/PrinterConnectionAndCommunication.cs b/PrinterCommunication/PrinterConnectionAndCommunication.cs index cc3f5bc55..14de213be 100644 --- a/PrinterCommunication/PrinterConnectionAndCommunication.cs +++ b/PrinterCommunication/PrinterConnectionAndCommunication.cs @@ -138,6 +138,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication public RootedObjectEventHandler PositionRead = new RootedObjectEventHandler(); public RootedObjectEventHandler ReadLine = new RootedObjectEventHandler(); public RootedObjectEventHandler WroteLine = new RootedObjectEventHandler(); + public RootedObjectEventHandler UpdateEventHook = new RootedObjectEventHandler(); FoundStringStartsWithCallbacks ReadLineStartCallBacks = new FoundStringStartsWithCallbacks(); FoundStringContainsCallbacks ReadLineContainsCallBacks = new FoundStringContainsCallbacks(); @@ -154,6 +155,8 @@ namespace MatterHackers.MatterControl.PrinterCommunication Stopwatch timeSinceLastReadAnything = new Stopwatch(); Stopwatch timeHaveBeenWaitingForOK = new Stopwatch(); + Stopwatch timeSinceUpdateEvent = new Stopwatch(); + int secondsBetweenUpdateEvent = 300; public enum CommunicationStates { Disconnected, AttemptingToConnect, FailedToConnect, Connected, PreparingToPrint, Printing, Paused, FinishedPrint, Disconnecting, ConnectionLost }; CommunicationStates communicationState = CommunicationStates.Disconnected; @@ -606,6 +609,22 @@ namespace MatterHackers.MatterControl.PrinterCommunication } } + public int TotalLayersInPrint + { + get + { + try + { + int layerCount = loadedGCode.NumChangesInZ; + return layerCount; + } + catch + { + return -1; + } + } + } + public double RatioIntoCurrentLayer { get @@ -713,6 +732,14 @@ namespace MatterHackers.MatterControl.PrinterCommunication temperatureRequestTimer.Restart(); } + if (timeSinceUpdateEvent.Elapsed.Seconds > secondsBetweenUpdateEvent) + { + UpdateEventHook.CallEvents(null, null); + timeSinceUpdateEvent.Restart(); + } + + + bool waited30SeconsdForOk = timeHaveBeenWaitingForOK.Elapsed.Seconds > 30; // waited for more than 30 seconds bool noResponseFor5Seconds = timeSinceLastReadAnything.Elapsed.Seconds > 5; bool waitedToLongForOK = waited30SeconsdForOk && noResponseFor5Seconds; diff --git a/StaticData/Icons/PrintStatusControls/cloud-24x24.png b/StaticData/Icons/PrintStatusControls/cloud-24x24.png new file mode 100644 index 0000000000000000000000000000000000000000..b40b7f72f9a96669f7a7d5a13e195829fcb21928 GIT binary patch literal 425 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJo*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>l1+{k%xMz%fBsPHO%~xv zIZR?d6B60))fw;ko)$LCKr81w!|emTZ`JH=n2&D@Z;*)MTf?+{OY-fbr`0#u=R7sN z-Rty?eOvEau?@HVw{~wk-w>|A{I1CHI*;nT9R078)-&r@M(*do(7z|5_=fhuqYPKe z9`Ae8)A#pZS4YUxZH#B9T#6A~KFMa)sp6=o3Qr@qtHky$idRbF+reU{qS=t@Idh4X z!@i6g%NA~V>wh54_tL~AyHvC~Zl4oTP`aj+q~E~r$(=mQpm&3>%Z19tZj2x1DLpFm zDe^ouX~|?83HIfiZ24pOEyQ;9c759Z{6NXYl+D}tbL>NA3RO;&+>l(I^-27%d=0a* YxbbtdpSxli7#J8lUHx3vIVCg!07;~)>;M1& literal 0 HcmV?d00001 diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index a8a27e5f3..1f8afe466 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -2406,3 +2406,12 @@ Translated:Has Heated Bed English:Has SD Card Reader Translated:Has SD Card Reader +English:Cloud Services +Translated:Cloud Services + +English:Cloud Monitoring (disabled) +Translated:Cloud Monitoring (disabled) + +English:Cloud Monitoring (enabled) +Translated:Cloud Monitoring (enabled) +