diff --git a/MatterControl.Winforms/WindowsPlatformsFeatures.cs b/MatterControl.Winforms/WindowsPlatformsFeatures.cs index e987ec729..170c7a4dd 100644 --- a/MatterControl.Winforms/WindowsPlatformsFeatures.cs +++ b/MatterControl.Winforms/WindowsPlatformsFeatures.cs @@ -30,11 +30,13 @@ either expressed or implied, of the FreeBSD Project. using System; using System.IO; using System.Linq; +using System.Reflection; using MatterHackers.Agg; using MatterHackers.Agg.Image; using MatterHackers.Agg.Platform; using MatterHackers.Agg.UI; using MatterHackers.MatterControl.PluginSystem; +using MatterHackers.MatterControl.PrinterControls.PrinterConnections; namespace MatterHackers.MatterControl { @@ -210,5 +212,31 @@ namespace MatterHackers.MatterControl } } } + + public void InitPluginFinder() + { + string searchPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); + + // Load plugins from all dlls in the startup directory + foreach (var file in Directory.GetFiles(searchPath, "*.dll")) + { + try + { + PluginFinder.LoadTypesFromAssembly(Assembly.LoadFile(file)); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine("Error loading assembly: " + ex.Message); + } + } + } + + public GuiWidget GetConnectDevicePage(object printer) + { + return new SetupStepComPortOne(printer as PrinterConfig); + } + + // Primarily required for Android, return true on non-Android platforms + public bool HasPermissionToDevice(object printer) => true; } } \ No newline at end of file diff --git a/MatterControlLib/AboutPage/UpdateControlData.cs b/MatterControlLib/AboutPage/UpdateControlData.cs index 124b3204b..e0aa53632 100644 --- a/MatterControlLib/AboutPage/UpdateControlData.cs +++ b/MatterControlLib/AboutPage/UpdateControlData.cs @@ -393,10 +393,7 @@ namespace MatterHackers.MatterControl //Change download file to friendly file name File.Move(updateFileName, friendlyFileName); #if __ANDROID__ - if (InstallUpdateFromMainActivity != null) - { - InstallUpdateFromMainActivity(this, null); - } + InstallUpdateFromMainActivity?.Invoke(this, null); return true; #else int tries = 0; diff --git a/MatterControlLib/MatterControlLib.csproj b/MatterControlLib/MatterControlLib.csproj index 6427f5cbb..9e2cbe447 100644 --- a/MatterControlLib/MatterControlLib.csproj +++ b/MatterControlLib/MatterControlLib.csproj @@ -13,6 +13,10 @@ TRACE;USE_OPENGL;IS_WINDOWS;IS_WINDOWS_FORMS + + $(DefineConstants);__ANDROID__ + + diff --git a/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrinterConnectButton.cs b/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrinterConnectButton.cs index 2f6cb0516..d3b2bbe71 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrinterConnectButton.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrinterConnectButton.cs @@ -170,15 +170,8 @@ namespace MatterHackers.MatterControl.ActionBar listenForConnectFailed = true; connectStartMs = UiThread.CurrentTimerMs; -#if __ANDROID__ if (!printer.Settings.GetValue(SettingsKey.enable_network_printing) - && !FrostedSerialPort.HasPermissionToDevice()) - { - // Opens the USB device permissions dialog which will call back into our UsbDevice broadcast receiver to connect - FrostedSerialPort.RequestPermissionToDevice(this.RunTroubleShooting); - } - else -#endif + && AppContext.Platform.HasPermissionToDevice(printer)) { printer.Connection.HaltConnectionThread(); printer.Connection.Connect(); @@ -186,12 +179,6 @@ namespace MatterHackers.MatterControl.ActionBar } } - private void RunTroubleShooting() - { - DialogWindow.Show( - new SetupWizardTroubleshooting(printer)); - } - private void Connection_Failed(object s, EventArgs e) { #if !__ANDROID__ diff --git a/MatterControlLib/PrinterCommunication/PrinterConnection.cs b/MatterControlLib/PrinterCommunication/PrinterConnection.cs index e838cffef..94e3292b6 100644 --- a/MatterControlLib/PrinterCommunication/PrinterConnection.cs +++ b/MatterControlLib/PrinterCommunication/PrinterConnection.cs @@ -893,7 +893,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication { serialPort = portFactory.CreateAndOpen(serialPortName, Printer.Settings, baudRate, true); #if __ANDROID__ - ToggleHighLowHigh(serialPort); + ToggleHighLowHigh(serialPort); #endif // TODO: Review and reconsider the cases where this was required // wait a bit of time to let the firmware start up diff --git a/MatterControlLib/PrinterControls/PrinterConnections/SetupStepMakeModelName.cs b/MatterControlLib/PrinterControls/PrinterConnections/SetupStepMakeModelName.cs index 07bd80d06..0b1be6272 100644 --- a/MatterControlLib/PrinterControls/PrinterConnections/SetupStepMakeModelName.cs +++ b/MatterControlLib/PrinterControls/PrinterConnections/SetupStepMakeModelName.cs @@ -181,14 +181,10 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections return; } -#if __ANDROID__ - UiThread.RunOnIdle(() => DialogWindow.ChangeToPage(new AndroidConnectDevicePage(printer))); -#else UiThread.RunOnIdle(() => { - DialogWindow.ChangeToPage(new SetupStepComPortOne(printer)); + DialogWindow.ChangeToPage(AppContext.Platform.GetConnectDevicePage(printer) as DialogPage); }); -#endif } } }); diff --git a/MatterControlLib/SetupWizard/AndroidConnectDevicePage.cs b/MatterControlLib/SetupWizard/AndroidConnectDevicePage.cs deleted file mode 100644 index a2b5421ae..000000000 --- a/MatterControlLib/SetupWizard/AndroidConnectDevicePage.cs +++ /dev/null @@ -1,208 +0,0 @@ -/* -Copyright (c) 2016, 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 MatterHackers.Agg; -using MatterHackers.Agg.UI; -using MatterHackers.Localizations; -using MatterHackers.MatterControl.CustomWidgets; -using MatterHackers.MatterControl.PrinterCommunication; - -namespace MatterHackers.MatterControl -{ - public class AndroidConnectDevicePage : DialogPage - { - private TextWidget generalError; - - private GuiWidget connectButton; - private GuiWidget skipButton; - private GuiWidget nextButton; - private GuiWidget retryButton; - private GuiWidget troubleshootButton; - - private TextWidget skipMessage; - - private FlowLayoutWidget retryButtonContainer; - private FlowLayoutWidget connectButtonContainer; - private PrinterConfig printer; - - public AndroidConnectDevicePage(PrinterConfig printer) - { - this.printer = printer; - - var printerNameLabel = new TextWidget("Connect Your Device".Localize() + ":", 0, 0, labelFontSize) - { - TextColor = theme.TextColor, - Margin = new BorderDouble(bottom: 10) - }; - contentRow.AddChild(printerNameLabel); - - contentRow.AddChild(new TextWidget("Instructions".Localize() + ":", 0, 0, 12,textColor:theme.TextColor)); - contentRow.AddChild(new TextWidget("1. Power on your 3D Printer.".Localize(), 0, 0, 12,textColor:theme.TextColor)); - contentRow.AddChild(new TextWidget("2. Attach your 3D Printer via USB.".Localize(), 0, 0, 12,textColor:theme.TextColor)); - contentRow.AddChild(new TextWidget("3. Press 'Connect'.".Localize(), 0, 0, 12,textColor:theme.TextColor)); - - //Add inputs to main container - connectButtonContainer = new FlowLayoutWidget() - { - HAnchor = HAnchor.Stretch, - Margin = new BorderDouble(0, 6) - }; - - connectButton = theme.CreateLightDialogButton("Connect".Localize()); - connectButton.Margin = new BorderDouble(0,0,10,0); - connectButton.Click += ConnectButton_Click; - - skipButton = theme.CreateLightDialogButton("Skip".Localize()); - skipButton.Click += NextButton_Click; - - connectButtonContainer.AddChild(connectButton); - connectButtonContainer.AddChild(skipButton); - connectButtonContainer.AddChild(new HorizontalSpacer()); - contentRow.AddChild(connectButtonContainer); - - skipMessage = new TextWidget("(Press 'Skip' to setup connection later)".Localize(), 0, 0, 10, textColor: theme.TextColor); - contentRow.AddChild(skipMessage); - - generalError = new TextWidget("", 0, 0, errorFontSize) - { - TextColor = theme.PrimaryAccentColor, - HAnchor = HAnchor.Stretch, - Visible = false, - Margin = new BorderDouble(top: 20), - }; - contentRow.AddChild(generalError); - - //Construct buttons - retryButton = theme.CreateLightDialogButton("Retry".Localize()); - retryButton.Click += ConnectButton_Click; - retryButton.Margin = new BorderDouble(0,0,10,0); - - //Construct buttons - troubleshootButton = theme.CreateLightDialogButton("Troubleshoot".Localize()); - troubleshootButton.Click += (s, e) => UiThread.RunOnIdle(() => - { - DialogWindow.ChangeToPage( - new SetupWizardTroubleshooting(printer)); - }); - - retryButtonContainer = new FlowLayoutWidget() - { - HAnchor = HAnchor.Stretch, - Margin = new BorderDouble(0, 6), - Visible = false - }; - - retryButtonContainer.AddChild(retryButton); - retryButtonContainer.AddChild(troubleshootButton); - retryButtonContainer.AddChild(new HorizontalSpacer()); - - contentRow.AddChild(retryButtonContainer); - - //Construct buttons - nextButton = theme.CreateDialogButton("Continue".Localize()); - nextButton.Click += NextButton_Click; - nextButton.Visible = false; - - GuiWidget hSpacer = new GuiWidget(); - hSpacer.HAnchor = HAnchor.Stretch; - - this.AddPageAction(nextButton); - - // Register listeners - printer.Connection.CommunicationStateChanged += Connection_CommunicationStateChanged; - - updateControls(true); - } - - void ConnectButton_Click(object sender, EventArgs mouseEvent) - { - printer.Connection.Connect(); - } - - void NextButton_Click(object sender, EventArgs mouseEvent) - { - this.generalError.Text = "Please wait..."; - this.generalError.Visible = true; - nextButton.Visible = false; - UiThread.RunOnIdle(this.DialogWindow.Close); - } - - private void Connection_CommunicationStateChanged(object sender, EventArgs args) - { - UiThread.RunOnIdle(() => updateControls(false)); - } - - private void updateControls(bool firstLoad) - { - connectButton.Visible = false; - skipMessage.Visible = false; - generalError.Visible = false; - nextButton.Visible = false; - - connectButtonContainer.Visible = false; - retryButtonContainer.Visible = false; - - if (printer.Connection.IsConnected) - { - generalError.Text = "{0}!".FormatWith ("Connection succeeded".Localize ()); - generalError.Visible = true; - nextButton.Visible = true; - } - else if (firstLoad || printer.Connection.CommunicationState == CommunicationStates.Disconnected) - { - generalError.Text = ""; - connectButton.Visible = true; - connectButtonContainer.Visible = true; - } - else if (printer.Connection.CommunicationState == CommunicationStates.AttemptingToConnect) - { - generalError.Text = "{0}...".FormatWith("Attempting to connect".Localize()); - generalError.Visible = true; - } - else - { - generalError.Text = "Uh-oh! Could not connect to printer.".Localize(); - generalError.Visible = true; - nextButton.Visible = false; - retryButtonContainer.Visible = true; - } - this.Invalidate(); - } - - public override void OnClosed(EventArgs e) - { - // Unregister listeners - printer.Connection.CommunicationStateChanged -= Connection_CommunicationStateChanged; - - base.OnClosed(e); - } - } -} diff --git a/MatterControlLib/SetupWizard/AndroidNetworkTroubleshootingPage.cs b/MatterControlLib/SetupWizard/AndroidNetworkTroubleshootingPage.cs deleted file mode 100644 index 420e2baf6..000000000 --- a/MatterControlLib/SetupWizard/AndroidNetworkTroubleshootingPage.cs +++ /dev/null @@ -1,57 +0,0 @@ -/* -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 MatterHackers.Agg; -using MatterHackers.Agg.UI; -using MatterHackers.Localizations; - -namespace MatterHackers.MatterControl -{ - public class NetworkTroubleshooting : DialogPage - { - public NetworkTroubleshooting() - { - contentRow.AddChild( - new TextWidget( - "MatterControl was unable to connect to the Internet. Please check your Wifi connection and try again".Localize() + "...", - textColor: theme.TextColor)); - - var configureButton = theme.CreateDialogButton("Configure Wifi".Localize()); - configureButton.Margin = new BorderDouble(0, 0, 10, 0); - configureButton.Click += (s, e) => - { - MatterControl.AppContext.Platform.ConfigureWifi(); - UiThread.RunOnIdle(DialogWindow.Close, 1); - }; - - //Add buttons to buttonContainer - AddPageAction(configureButton); - } - } -} diff --git a/MatterControlLib/SetupWizard/SetupWizardTroubleshooting.cs b/MatterControlLib/SetupWizard/SetupWizardTroubleshooting.cs deleted file mode 100644 index 41b416006..000000000 --- a/MatterControlLib/SetupWizard/SetupWizardTroubleshooting.cs +++ /dev/null @@ -1,320 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; - -using MatterHackers.Agg; -using MatterHackers.Agg.Platform; -using MatterHackers.Agg.UI; -using MatterHackers.Localizations; -using MatterHackers.MatterControl.ConfigurationPage.PrintLeveling; -using MatterHackers.MatterControl.DataStorage; -using MatterHackers.MatterControl.CustomWidgets; -using MatterHackers.MatterControl.PrinterCommunication; -using MatterHackers.SerialPortCommunication.FrostedSerial; -#if __ANDROID__ -using Com.Hoho.Android.Usbserial.Driver; -using Android.Hardware.Usb; -using Android.Content; -#endif - -namespace MatterHackers.MatterControl -{ - public class SetupWizardTroubleshooting : DialogPage - { - private GuiWidget nextButton; - - private CriteriaRow connectToPrinterRow; - - // Used in Android - private System.Threading.Timer checkForPermissionTimer; - private PrinterConfig printer; - -#if __ANDROID__ - private static UsbManager usbManager - { - get { return (UsbManager) Android.App.Application.Context.ApplicationContext.GetSystemService(Context.UsbService); } - } -#endif - - public SetupWizardTroubleshooting(PrinterConfig printer) - { - this.WindowTitle = "Troubleshooting".Localize(); - this.printer = printer; - - RefreshStatus(); - - nextButton = theme.CreateDialogButton("Continue".Localize()); - nextButton.Click += (s, e) => UiThread.RunOnIdle(this.DialogWindow.Close); - nextButton.Visible = false; - - this.AddPageAction(nextButton); - - // Register listeners - printer.Connection.CommunicationStateChanged += Connection_CommunicationStateChanged; - } - - public void Connection_CommunicationStateChanged(object test, EventArgs args) - { - if (printer.Connection.CommunicationState == CommunicationStates.Connected && connectToPrinterRow != null) - { - connectToPrinterRow.SetSuccessful(); - nextButton.Visible = true; - } - } - - protected override void OnCancel(out bool abortCancel) - { - abortCancel = true; - - UiThread.RunOnIdle(() => - { - this.DialogWindow.ChangeToPage(new AndroidConnectDevicePage(printer)); - }); - } - - public override void OnClosed(EventArgs e) - { - // Unregister listeners - printer.Connection.CommunicationStateChanged -= Connection_CommunicationStateChanged; - - if (checkForPermissionTimer != null) - { - checkForPermissionTimer.Dispose(); - } - - base.OnClosed(e); - } - - private void RefreshStatus() - { - CriteriaRow.ResetAll(); - - // Clear the main container - contentRow.CloseAllChildren(); - - // Regen and refresh the troubleshooting criteria - var printerNameLabel = new TextWidget(string.Format("{0}:", "Connection Troubleshooting".Localize()), 0, 0, labelFontSize) - { - TextColor = theme.TextColor, - Margin = new BorderDouble(bottom: 10) - }; - -#if __ANDROID__ - IUsbSerialPort serialPort = FrostedSerialPort.LoadSerialDriver(null); - -#if ANDROID7 - // Filter out the built-in 002 device and select the first item from the list - // On the T7 Android device, there is a non-printer device always registered at usb/002/002 that must be ignored - UsbDevice usbPrintDevice = usbManager.DeviceList.Values.Where(d => d.DeviceName != "/dev/bus/usb/002/002").FirstOrDefault(); -#else - UsbDevice usbPrintDevice = usbManager.DeviceList.Values.FirstOrDefault(); -#endif - - UsbStatus usbStatus = new UsbStatus () { - IsDriverLoadable = (serialPort != null), - HasUsbDevice = true, - HasUsbPermission = false, - AnyUsbDeviceExists = usbPrintDevice != null - }; - - if (!usbStatus.IsDriverLoadable) - { - usbStatus.HasUsbDevice = usbPrintDevice != null; - - if (usbStatus.HasUsbDevice) { - // TODO: Testing specifically for UsbClass.Comm seems fragile but no better alternative exists without more research - usbStatus.UsbDetails = new UsbDeviceDetails () { - ProductID = usbPrintDevice.ProductId, - VendorID = usbPrintDevice.VendorId, - DriverClass = usbManager.DeviceList.Values.First ().DeviceClass == Android.Hardware.Usb.UsbClass.Comm ? "cdcDriverType" : "ftdiDriverType" - }; - usbStatus.Summary = string.Format ("No USB device definition found. Click the 'Fix' button to add an override for your device ", usbStatus.UsbDetails.VendorID, usbStatus.UsbDetails.ProductID); - } - } - - usbStatus.HasUsbPermission = usbStatus.IsDriverLoadable && FrostedSerialPort.HasPermissionToDevice(serialPort); - - contentRow.AddChild(printerNameLabel); - - contentRow.AddChild(new CriteriaRow( - "USB Connection", - "Retry", - "No USB device found. Check and reseat cables and try again", - usbStatus.AnyUsbDeviceExists, - () => UiThread.RunOnIdle(RefreshStatus), - theme)); - - contentRow.AddChild(new CriteriaRow( - "USB Driver", - "Fix", - usbStatus.Summary, - usbStatus.IsDriverLoadable, - () => - { - string overridePath = Path.Combine(ApplicationDataStorage.ApplicationUserDataPath, "data", "usboverride.local"); - UsbDeviceDetails usbDetails = usbStatus.UsbDetails; - File.AppendAllText(overridePath, string.Format("{0},{1},{2}\r\n", usbDetails.VendorID, usbDetails.ProductID, usbDetails.DriverClass)); - - UiThread.RunOnIdle(() => RefreshStatus()); - }, - theme)); - - contentRow.AddChild(new CriteriaRow( - "USB Permission", - "Request Permission", - "Click the 'Request Permission' button to gain Android access rights", - usbStatus.HasUsbPermission, - () => - { - - if (checkForPermissionTimer == null) - { - checkForPermissionTimer = new System.Threading.Timer((state) => - { - - if (FrostedSerialPort.HasPermissionToDevice(serialPort)) - { - UiThread.RunOnIdle(this.RefreshStatus); - checkForPermissionTimer.Dispose(); - } - }, null, 200, 200); - } - - FrostedSerialPort.RequestPermissionToDevice(serialPort); - }, - theme)); - -#endif - connectToPrinterRow = new CriteriaRow( - "Connect to Printer".Localize(), - "Connect".Localize(), - "Click the 'Connect' button to retry the original connection attempt".Localize(), - false, - () => printer.Connection.Connect(), - theme); - - contentRow.AddChild(connectToPrinterRow); - - if (CriteriaRow.ActiveErrorItem != null) { - - var errorText = new FlowLayoutWidget () { - Padding = new BorderDouble (0, 15) - }; - - errorText.AddChild( - new TextWidget(CriteriaRow.ActiveErrorItem.ErrorText) - { - TextColor = theme.PrimaryAccentColor - }); - - contentRow.AddChild(errorText); - } - } - - private class CriteriaRow : FlowLayoutWidget - { - public static CriteriaRow ActiveErrorItem { get; private set; } - - public string ErrorText { get; private set; } - - private static bool stillSuccessful = true; - - private static int criteriaCount = 0; - - private static Color disabledTextColor = new Color(0.35, 0.35, 0.35); - private static Color disabledBackColor = new Color(0.22, 0.22, 0.22); - private static Color toggleColor = new Color(Color.Gray.red + 2, Color.Gray.green + 2, Color.Gray.blue + 2); - - public CriteriaRow (string itemText, string fixitText, string errorText, bool succeeded, Action fixAction, ThemeConfig theme) - : base(FlowDirection.LeftToRight) - { - HAnchor = HAnchor.Stretch; - VAnchor = VAnchor.Absolute; - - ErrorText = errorText; - - base.Height = 40; - - base.AddChild(new TextWidget (string.Format(" {0}. {1}", criteriaCount + 1, itemText)){ - TextColor = stillSuccessful ? Color.White : disabledTextColor, - VAnchor = VAnchor.Center - }); - - if(stillSuccessful && !succeeded) - { - ActiveErrorItem = this; - } - - base.AddChild(new HorizontalSpacer()); - - if(stillSuccessful) { - if(succeeded) - { - // Add checkmark image - AddSuccessIcon(); - } else { - // Add Fix button - var button = theme.CreateDialogButton(fixitText); - button.VAnchor = VAnchor.Center; - button.Padding = new BorderDouble(3, 8); - button.Click += (s, e) => fixAction?.Invoke(); - base.AddChild(button); - } - } - - if(stillSuccessful) - { - this.BackgroundColor = (criteriaCount % 2 == 0) ? Color.Gray : toggleColor; - } - else - { - this.BackgroundColor = disabledBackColor; - } - - stillSuccessful &= succeeded; - - criteriaCount++; - } - - public void SetSuccessful() - { - this.RemoveChild (this.Children.Last ()); - ActiveErrorItem = null; - AddSuccessIcon(); - } - - public static void ResetAll() - { - criteriaCount = 0; - stillSuccessful = true; - ActiveErrorItem = null; - } - - private void AddSuccessIcon() - { - base.AddChild (new ImageWidget (AggContext.StaticData.LoadImage (Path.Combine ("Icons", "426.png"))) { - VAnchor = VAnchor.Center - }); - } - - } - - private class UsbStatus - { - public bool HasUsbDevice { get; set; } - public bool IsDriverLoadable { get; set; } - public string Summary { get; set; } - public bool HasUsbPermission { get; set; } - public bool AnyUsbDeviceExists { get ; set; } - public UsbDeviceDetails UsbDetails { get; set; } - } - - private class UsbDeviceDetails - { - public int VendorID { get; set; } - public int ProductID { get; set; } - public string DriverClass { get; set; } - } - } -} diff --git a/PluginSystem/INativePlatformFeatures.cs b/PluginSystem/INativePlatformFeatures.cs index 659aa7156..69eb93c01 100644 --- a/PluginSystem/INativePlatformFeatures.cs +++ b/PluginSystem/INativePlatformFeatures.cs @@ -41,9 +41,12 @@ namespace MatterHackers.MatterControl void ConfigureWifi(); bool CameraInUseByExternalProcess { get; set; } bool IsNetworkConnected(); + void InitPluginFinder(); + GuiWidget GetConnectDevicePage(object printer); void FindAndInstantiatePlugins(SystemWindow systemWindow); void ProcessCommandline(); void PlatformInit(Action reporter); void GenerateLocalizationValidationFile(); + bool HasPermissionToDevice(object printer); } } \ No newline at end of file diff --git a/Program.cs b/Program.cs index fad6f3caa..7953153f3 100644 --- a/Program.cs +++ b/Program.cs @@ -128,8 +128,9 @@ namespace MatterHackers.MatterControl // Init platformFeaturesProvider before ShowAsSystemWindow string platformFeaturesProvider = "MatterHackers.MatterControl.WindowsPlatformsFeatures, MatterControl.Winforms"; - MatterHackers.MatterControl.AppContext.Platform = AggContext.CreateInstanceFrom(platformFeaturesProvider); - MatterHackers.MatterControl.AppContext.Platform.ProcessCommandline(); + AppContext.Platform = AggContext.CreateInstanceFrom(platformFeaturesProvider); + AppContext.Platform.InitPluginFinder(); + AppContext.Platform.ProcessCommandline(); config.Bind("MatterControl", MatterHackers.MatterControl.AppContext.Options); diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index c583dd6d0..4261fd059 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit c583dd6d0a62f478e456a25552935370446ab099 +Subproject commit 4261fd059aeb45648eb24f53e6b784641deded41