Improving printer setup (com port detection)

This commit is contained in:
Lars Brubaker 2021-11-30 11:54:36 -08:00
parent 9cfc85f90e
commit de77575fd2
3 changed files with 56 additions and 25 deletions

View file

@ -1003,7 +1003,8 @@ namespace MatterHackers.MatterControl
/// like a bad save or load.
/// </summary>
/// <param name="message">The message to show</param>
public void ShowNotification(string message)
/// <param name="durationSeconds">The length of time to show the message</param>
public void ShowNotification(string message, double durationSeconds = 5)
{
foreach(var printer in ActivePrinters)
{
@ -1013,6 +1014,23 @@ namespace MatterHackers.MatterControl
terminal.WriteLine(message);
}
}
// show the message for the time requested
this.Tasks.Execute(message,
null,
(progress, cancellationToken) =>
{
var time = UiThread.CurrentTimerMs;
var status = new ProgressStatus();
while (UiThread.CurrentTimerMs < time + durationSeconds * 1000)
{
Thread.Sleep(30);
status.Progress0To1 = (UiThread.CurrentTimerMs - time) / 1000.0 / durationSeconds;
progress.Report(status);
}
return Task.CompletedTask;
});
}
public void Connection_ErrorReported(object sender, string line)

View file

@ -51,7 +51,7 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
var elementMargin = new BorderDouble(top: 5);
var printerMessageOne = new TextWidget("MatterControl will now attempt to auto-detect printer.".Localize(), 0, 0, 10)
var printerMessageOne = new TextWidget("MatterControl will now attempt to auto-detect your printer.".Localize(), 0, 0, 10)
{
TextColor = theme.TextColor,
HAnchor = HAnchor.Stretch,
@ -59,7 +59,7 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
};
container.AddChild(printerMessageOne);
var printerMessageTwo = new TextWidget(string.Format("1.) {0} ({1}).", "Disconnect printer".Localize(), "if currently connected".Localize()), 0, 0, 12)
var printerMessageTwo = new WrappedTextWidget(string.Format("1.) {0} ({1}).", "Unplug printer USB cable from computer".Localize(), "if connected".Localize()), 12)
{
TextColor = theme.TextColor,
HAnchor = HAnchor.Stretch,

View file

@ -45,7 +45,7 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
private GuiWidget nextButton;
private GuiWidget connectButton;
private TextWidget printerErrorMessage;
private TextWidget printerConnectionMessage;
private PrinterConfig printer;
@ -61,20 +61,39 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
nextButton.Click += (s, e) => Parent.Close();
nextButton.Visible = false;
var connectButtonHasBeenClicked = false;
void CheckOnPorts()
{
string candidatePort = FrostedSerialPort.GetPortNames().Except(startingPortNames).FirstOrDefault();
if (candidatePort != null)
{
// we found a new added port click the connect button for the user
connectButton.InvokeClick();
}
else if (!connectButtonHasBeenClicked && this.ActuallyVisibleOnScreen())
{
// keep checking as long as this is open
UiThread.RunOnIdle(CheckOnPorts, .2);
}
}
UiThread.RunOnIdle(CheckOnPorts, .2);
connectButton = theme.CreateDialogButton("Connect".Localize());
connectButton.Click += (s, e) =>
{
connectButtonHasBeenClicked = true;
// Select the first port that's in GetPortNames() but not in startingPortNames
string candidatePort = FrostedSerialPort.GetPortNames().Except(startingPortNames).FirstOrDefault();
if (candidatePort == null)
{
printerErrorMessage.TextColor = Color.Red;
printerErrorMessage.Text = "Oops! Printer could not be detected ".Localize();
printerConnectionMessage.TextColor = Color.Red;
printerConnectionMessage.Text = "Oops! Printer could not be detected ".Localize();
}
else
{
printerErrorMessage.TextColor = theme.TextColor;
printerErrorMessage.Text = "Attempting to connect".Localize() + "...";
printerConnectionMessage.TextColor = theme.TextColor;
printerConnectionMessage.Text = "Attempting to connect".Localize() + "...";
printer.Settings.Helpers.SetComPort(candidatePort);
printer.Connection.Connect();
@ -120,7 +139,7 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
var elementMargin = new BorderDouble(top: 5);
var printerMessageOne = new TextWidget("MatterControl will now attempt to auto-detect printer.".Localize(), 0, 0, 10)
var printerMessageOne = new TextWidget("MatterControl will now attempt to auto-detect your printer.".Localize(), 0, 0, 10)
{
Margin = elementMargin,
TextColor = theme.TextColor,
@ -128,7 +147,7 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
};
container.AddChild(printerMessageOne);
var printerMessageFour = new TextWidget(string.Format("1.) {0}.", "Connect printer (make sure it is on)".Localize()), 0, 0, 12)
var printerMessageFour = new TextWidget(string.Format("1.) {0}.", "Plug in printer USB cable and turn printer on".Localize()), 0, 0, 12)
{
TextColor = theme.TextColor,
HAnchor = HAnchor.Stretch,
@ -136,22 +155,14 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
};
container.AddChild(printerMessageFour);
var printerMessageFive = new TextWidget(string.Format("2.) {0} '{1}'.", "Press".Localize(), "Connect".Localize()), 0, 0, 12)
{
TextColor = theme.TextColor,
HAnchor = HAnchor.Stretch,
Margin = elementMargin
};
printerErrorMessage = new TextWidget("", 0, 0, 10)
printerConnectionMessage = new TextWidget("", 0, 0, 10)
{
AutoExpandBoundsToText = true,
TextColor = Color.Red,
HAnchor = HAnchor.Stretch,
Margin = elementMargin
};
container.AddChild(printerErrorMessage);
container.AddChild(printerConnectionMessage);
var removeImage = StaticData.Instance.LoadImage(Path.Combine("Images", "insert usb.png")).SetPreMultiply();
container.AddChild(new ImageWidget(removeImage)
@ -173,16 +184,18 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
{
if (printer.Connection.IsConnected)
{
printerErrorMessage.TextColor = theme.TextColor;
printerErrorMessage.Text = "Connection succeeded".Localize() + "!";
printerConnectionMessage.TextColor = theme.TextColor;
printerConnectionMessage.Text = "Connection succeeded".Localize() + "!";
printerConnectionMessage.TextColor = Color.Red;
nextButton.Visible = true;
connectButton.Visible = false;
this?.Parent?.Close();
UiThread.RunOnIdle(() => this?.Parent?.Close(), 1);
ApplicationController.Instance.ShowNotification("Connection succeeded");
}
else if (printer.Connection.CommunicationState != CommunicationStates.AttemptingToConnect)
{
printerErrorMessage.TextColor = Color.Red;
printerErrorMessage.Text = "Uh-oh! Could not connect to printer.".Localize();
printerConnectionMessage.TextColor = Color.Red;
printerConnectionMessage.Text = "Uh-oh! Could not connect to printer.".Localize();
connectButton.Visible = true;
nextButton.Visible = false;
}