176 lines
6.8 KiB
C#
176 lines
6.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.IO;
|
|
using System.IO.Ports;
|
|
using System.Diagnostics;
|
|
|
|
using MatterHackers.Agg;
|
|
using MatterHackers.Agg.UI;
|
|
using MatterHackers.Agg.OpenGlGui;
|
|
using MatterHackers.PolygonMesh;
|
|
using MatterHackers.RenderOpenGl;
|
|
using MatterHackers.VectorMath;
|
|
using MatterHackers.MatterControl.DataStorage;
|
|
using MatterHackers.Localizations;
|
|
|
|
namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
|
|
{
|
|
public class SetupStepInstallDriver : SetupConnectionWidgetBase
|
|
{
|
|
FlowLayoutWidget printerDriverContainer;
|
|
TextWidget printerDriverMessage;
|
|
string printerDriverFilePath;
|
|
|
|
//bool driverInstallFinished;
|
|
|
|
Button installButton;
|
|
Button skipButton;
|
|
|
|
public SetupStepInstallDriver(ConnectionWindow windowController, GuiWidget containerWindowToClose, PrinterSetupStatus setupPrinterStatus)
|
|
: base(windowController, containerWindowToClose, setupPrinterStatus)
|
|
{
|
|
this.printerDriverFilePath = this.PrinterSetupStatus.DriverFilePath;
|
|
|
|
headerLabel.Text = string.Format(new LocalizedString("Install Communication Driver").Translated);
|
|
printerDriverContainer = createPrinterDriverContainer();
|
|
contentRow.AddChild(printerDriverContainer);
|
|
{
|
|
//Construct buttons
|
|
installButton = textImageButtonFactory.Generate(new LocalizedString("Install Driver").Translated);
|
|
installButton.Click += new ButtonBase.ButtonEventHandler(installButton_Click);
|
|
|
|
skipButton = textImageButtonFactory.Generate(new LocalizedString("Skip").Translated);
|
|
skipButton.Click += new ButtonBase.ButtonEventHandler(skipButton_Click);
|
|
|
|
GuiWidget hSpacer = new GuiWidget();
|
|
hSpacer.HAnchor = HAnchor.ParentLeftRight;
|
|
|
|
//Add buttons to buttonContainer
|
|
footerRow.AddChild(installButton);
|
|
footerRow.AddChild(skipButton);
|
|
footerRow.AddChild(hSpacer);
|
|
|
|
footerRow.AddChild(cancelButton);
|
|
}
|
|
}
|
|
|
|
void installButton_Click(object sender, MouseEventArgs mouseEvent)
|
|
{
|
|
bool canContinue = this.OnSave();
|
|
if (canContinue)
|
|
{
|
|
UiThread.RunOnIdle(MoveToNextWidget);
|
|
}
|
|
}
|
|
|
|
void skipButton_Click(object sender, MouseEventArgs mouseEvent)
|
|
{
|
|
UiThread.RunOnIdle(MoveToNextWidget);
|
|
}
|
|
|
|
private FlowLayoutWidget createPrinterDriverContainer()
|
|
{
|
|
FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.TopToBottom);
|
|
container.Margin = new BorderDouble(0, 5);
|
|
BorderDouble elementMargin = new BorderDouble(top: 3);
|
|
|
|
printerDriverMessage = new TextWidget(new LocalizedString("This printer requires a driver for communication.").Translated, 0, 0, 10);
|
|
printerDriverMessage.TextColor = RGBA_Bytes.White;
|
|
printerDriverMessage.HAnchor = HAnchor.ParentLeftRight;
|
|
printerDriverMessage.Margin = elementMargin;
|
|
|
|
TextWidget printerDriverMessageTwo = new TextWidget(new LocalizedString("Driver located. Would you like to install?").Translated, 0, 0, 10);
|
|
printerDriverMessageTwo.TextColor = RGBA_Bytes.White;
|
|
printerDriverMessageTwo.HAnchor = HAnchor.ParentLeftRight;
|
|
printerDriverMessageTwo.Margin = elementMargin;
|
|
|
|
|
|
container.AddChild(printerDriverMessage);
|
|
container.AddChild (printerDriverMessageTwo);
|
|
|
|
container.HAnchor = HAnchor.ParentLeftRight;
|
|
return container;
|
|
}
|
|
|
|
void MoveToNextWidget(object state)
|
|
{
|
|
// you can call this like this
|
|
// AfterUiEvents.AddAction(new AfterUIAction(MoveToNextWidget));
|
|
|
|
if (this.ActivePrinter.BaudRate == null)
|
|
{
|
|
Parent.AddChild(new SetupStepBaudRate((ConnectionWindow)Parent, Parent, this.PrinterSetupStatus));
|
|
Parent.RemoveChild(this);
|
|
}
|
|
else
|
|
{
|
|
Parent.AddChild(new SetupStepComPortOne((ConnectionWindow)Parent, Parent, this.PrinterSetupStatus));
|
|
Parent.RemoveChild(this);
|
|
}
|
|
}
|
|
|
|
void InstallDriver(string fileName)
|
|
{
|
|
switch (MatterHackers.Agg.UI.WindowsFormsAbstract.GetOSType())
|
|
{
|
|
case Agg.UI.WindowsFormsAbstract.OSType.Windows:
|
|
if (File.Exists(fileName))
|
|
{
|
|
if (Path.GetExtension(fileName).ToUpper() == ".INF")
|
|
{
|
|
var driverInstallerProcess = new Process();
|
|
// Prepare the process to run
|
|
// Enter in the command line arguments, everything you would enter after the executable name itself
|
|
driverInstallerProcess.StartInfo.Arguments = System.IO.Path.GetFullPath(fileName);
|
|
// Enter the executable to run, including the complete path
|
|
string printerDriverInstallerExePathAndFileName = Path.Combine(".", "InfInstaller.exe");
|
|
|
|
driverInstallerProcess.StartInfo.CreateNoWindow = true;
|
|
driverInstallerProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
|
|
|
|
driverInstallerProcess.StartInfo.FileName = System.IO.Path.GetFullPath(printerDriverInstallerExePathAndFileName);
|
|
driverInstallerProcess.StartInfo.Verb = "runas";
|
|
driverInstallerProcess.StartInfo.UseShellExecute = true;
|
|
|
|
driverInstallerProcess.Start();
|
|
|
|
driverInstallerProcess.WaitForExit();
|
|
|
|
// Retrieve the app's exit code
|
|
var exitCode = driverInstallerProcess.ExitCode;
|
|
}
|
|
else
|
|
{
|
|
Process.Start(fileName);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw new Exception(string.Format("Can't find dirver {0}.", fileName));
|
|
}
|
|
break;
|
|
|
|
case Agg.UI.WindowsFormsAbstract.OSType.Mac:
|
|
break;
|
|
}
|
|
}
|
|
|
|
bool OnSave()
|
|
{
|
|
try
|
|
{
|
|
printerDriverMessage.Text = new LocalizedString("Installing...").Translated;
|
|
InstallDriver(this.printerDriverFilePath);
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
printerDriverMessage.Text = new LocalizedString("Sorry, we were unable to install the driver.").Translated;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|