mattercontrol/PrinterControls/PrinterConnections/SetupStepMakeModelName.cs

284 lines
11 KiB
C#
Raw Normal View History

2014-01-29 19:09:30 -08:00
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
2014-01-29 19:09:30 -08:00
using MatterHackers.Agg;
2014-06-19 16:09:38 -07:00
using MatterHackers.Agg.PlatformAbstract;
2014-01-29 19:09:30 -08:00
using MatterHackers.Agg.UI;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.ConfigurationPage.PrintLeveling;
using MatterHackers.MatterControl.DataStorage;
2014-01-29 19:09:30 -08:00
namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
{
//Normally step one of the setup process
public class SetupStepMakeModelName : SetupConnectionWidgetBase
{
FlowLayoutWidget printerModelContainer;
FlowLayoutWidget printerMakeContainer;
FlowLayoutWidget printerNameContainer;
MHTextEditWidget printerNameInput;
List<CustomCommands> printerCustomCommands;
TextWidget printerNameError;
TextWidget printerModelError;
TextWidget printerMakeError;
PrinterChooser printerManufacturerSelector;
2014-01-29 19:09:30 -08:00
Button nextButton;
bool usingDefaultName;
public SetupStepMakeModelName(ConnectionWindow windowController, GuiWidget containerWindowToClose, PrinterSetupStatus printerSetupStatus = null)
: base(windowController, containerWindowToClose, printerSetupStatus)
2014-01-29 19:09:30 -08:00
{
//Construct inputs
printerNameContainer = createPrinterNameContainer();
printerMakeContainer = createPrinterMakeContainer();
if (printerManufacturerSelector.CountOfMakes == 1)
{
ActivePrinter.Make = printerManufacturerSelector.ManufacturerDropList.SelectedValue;
printerMakeContainer.Visible = false;
printerModelContainer = createPrinterModelContainer(printerManufacturerSelector.ManufacturerDropList.SelectedValue);
printerModelContainer.Visible = true;
}
else
{
printerModelContainer = createPrinterModelContainer();
}
2014-01-29 19:09:30 -08:00
//Add inputs to main container
contentRow.AddChild(printerNameContainer);
contentRow.AddChild(printerMakeContainer);
contentRow.AddChild(printerModelContainer);
//Construct buttons
2014-03-11 15:24:47 -07:00
nextButton = textImageButtonFactory.Generate(LocalizedString.Get("Save & Continue"));
nextButton.Click += new EventHandler(NextButton_Click);
2014-01-29 19:09:30 -08:00
GuiWidget hSpacer = new GuiWidget();
hSpacer.HAnchor = HAnchor.ParentLeftRight;
//Add buttons to buttonContainer
footerRow.AddChild(nextButton);
footerRow.AddChild(hSpacer);
footerRow.AddChild(cancelButton);
usingDefaultName = true;
2014-01-29 19:09:30 -08:00
SetElementState();
}
private void SetElementState()
{
2014-01-29 19:09:30 -08:00
printerModelContainer.Visible = (this.ActivePrinter.Make != null);
nextButton.Visible = (this.ActivePrinter.Model != null && this.ActivePrinter.Make !=null);
}
private FlowLayoutWidget createPrinterNameContainer()
{
FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.TopToBottom);
container.Margin = new BorderDouble(0, 5);
BorderDouble elementMargin = new BorderDouble(top: 3);
2014-03-11 15:24:47 -07:00
string printerNameLabelTxt = LocalizedString.Get("Printer Name");
string printerNameLabelTxtFull = string.Format ("{0}:", printerNameLabelTxt);
TextWidget printerNameLabel = new TextWidget(printerNameLabelTxtFull, 0, 0, 12);
2014-01-29 19:09:30 -08:00
printerNameLabel.TextColor = this.defaultTextColor;
printerNameLabel.HAnchor = HAnchor.ParentLeftRight;
printerNameLabel.Margin = new BorderDouble(0, 0, 0, 1);
printerNameInput = new MHTextEditWidget(this.ActivePrinter.Name);
printerNameInput.HAnchor = HAnchor.ParentLeftRight;
printerNameInput.KeyPressed += new KeyPressEventHandler(PrinterNameInput_KeyPressed);
2014-01-29 19:09:30 -08:00
2014-03-11 15:24:47 -07:00
printerNameError = new TextWidget(LocalizedString.Get("Give your printer a name."), 0, 0, 10);
printerNameError.TextColor = ActiveTheme.Instance.PrimaryTextColor;
2014-01-29 19:09:30 -08:00
printerNameError.HAnchor = HAnchor.ParentLeftRight;
printerNameError.Margin = elementMargin;
container.AddChild(printerNameLabel);
container.AddChild(printerNameInput);
container.AddChild(printerNameError);
container.HAnchor = HAnchor.ParentLeftRight;
return container;
}
private FlowLayoutWidget createPrinterMakeContainer()
{
FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.TopToBottom);
container.Margin = new BorderDouble(0, 5);
BorderDouble elementMargin = new BorderDouble(top: 3);
2014-03-11 15:24:47 -07:00
string printerManufacturerLabelTxt = LocalizedString.Get("Select Make");
string printerManufacturerLabelTxtFull = string.Format("{0}:", printerManufacturerLabelTxt);
TextWidget printerManufacturerLabel = new TextWidget(printerManufacturerLabelTxtFull, 0, 0, 12);
2014-01-29 19:09:30 -08:00
printerManufacturerLabel.TextColor = this.defaultTextColor;
printerManufacturerLabel.HAnchor = HAnchor.ParentLeftRight;
printerManufacturerLabel.Margin = elementMargin;
printerManufacturerSelector = new PrinterChooser();
2014-01-29 19:09:30 -08:00
printerManufacturerSelector.HAnchor = HAnchor.ParentLeftRight;
printerManufacturerSelector.Margin = elementMargin;
printerManufacturerSelector.ManufacturerDropList.SelectionChanged += new EventHandler(ManufacturerDropList_SelectionChanged);
2014-03-11 15:24:47 -07:00
printerMakeError = new TextWidget(LocalizedString.Get("Select the printer manufacturer"), 0, 0, 10);
printerMakeError.TextColor = ActiveTheme.Instance.PrimaryTextColor;
2014-01-29 19:09:30 -08:00
printerMakeError.HAnchor = HAnchor.ParentLeftRight;
printerMakeError.Margin = elementMargin;
container.AddChild(printerManufacturerLabel);
container.AddChild(printerManufacturerSelector);
container.AddChild(printerMakeError);
container.HAnchor = HAnchor.ParentLeftRight;
return container;
}
2014-01-29 19:09:30 -08:00
private FlowLayoutWidget createPrinterModelContainer(string make = "Other")
{
FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.TopToBottom);
container.Margin = new BorderDouble(0, 5);
BorderDouble elementMargin = new BorderDouble(top: 3);
2014-03-11 15:24:47 -07:00
string printerModelLabelTxt = LocalizedString.Get("Select Model");
string printerModelLabelTxtFull = string.Format ("{0}:", printerModelLabelTxt);
TextWidget printerModelLabel = new TextWidget(printerModelLabelTxtFull, 0, 0, 12);
2014-01-29 19:09:30 -08:00
printerModelLabel.TextColor = this.defaultTextColor;
printerModelLabel.HAnchor = HAnchor.ParentLeftRight;
printerModelLabel.Margin = elementMargin;
ModelChooser printerModelSelector = new ModelChooser(make);
printerModelSelector.HAnchor = HAnchor.ParentLeftRight;
printerModelSelector.Margin = elementMargin;
printerModelSelector.ModelDropList.SelectionChanged += new EventHandler(ModelDropList_SelectionChanged);
printerModelSelector.SelectIfOnlyOneModel();
2014-01-29 19:09:30 -08:00
2014-03-11 15:24:47 -07:00
printerModelError = new TextWidget(LocalizedString.Get("Select the printer model"), 0, 0, 10);
printerModelError.TextColor = ActiveTheme.Instance.PrimaryTextColor;
2014-01-29 19:09:30 -08:00
printerModelError.HAnchor = HAnchor.ParentLeftRight;
printerModelError.Margin = elementMargin;
container.AddChild(printerModelLabel);
container.AddChild(printerModelSelector);
container.AddChild(printerModelError);
container.HAnchor = HAnchor.ParentLeftRight;
return container;
}
private void ManufacturerDropList_SelectionChanged(object sender, EventArgs e)
{
ActivePrinter.Make = ((DropDownList)sender).SelectedLabel;
2014-01-29 19:09:30 -08:00
ActivePrinter.Model = null;
ReconstructModelSelector();
SetElementState();
}
2014-01-29 19:09:30 -08:00
private void ReconstructModelSelector()
{
2014-01-29 19:09:30 -08:00
//reconstruct model selector
int currentIndex = contentRow.GetChildIndex(printerModelContainer);
contentRow.RemoveChild(printerModelContainer);
printerModelContainer = createPrinterModelContainer(ActivePrinter.Make);
contentRow.AddChild(printerModelContainer, currentIndex);
contentRow.Invalidate();
printerMakeError.Visible = false;
}
private void ModelDropList_SelectionChanged(object sender, EventArgs e)
{
UiThread.RunOnIdle((state) =>
{
ActivePrinter.Model = ((DropDownList)sender).SelectedLabel;
currentPrinterSetupStatus.LoadSetupSettings(ActivePrinter.Make, ActivePrinter.Model);
printerModelError.Visible = false;
SetElementState();
if(usingDefaultName)
{
printerNameInput.Text = String.Format ("{0} {1} ({2})", this.ActivePrinter.Make, this.ActivePrinter.Model, ExistingPrinterCount () + 1);
}
});
2014-01-29 19:09:30 -08:00
}
private void PrinterNameInput_KeyPressed(object sender, KeyPressEventArgs e)
{
this.usingDefaultName = false;
}
2014-01-29 19:09:30 -08:00
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.currentPrinterSetupStatus));
2014-01-29 19:09:30 -08:00
Parent.RemoveChild(this);
}
else if (this.currentPrinterSetupStatus.DriversToInstall.Count > 0)
2014-01-29 19:09:30 -08:00
{
Parent.AddChild(new SetupStepInstallDriver((ConnectionWindow)Parent, Parent, this.currentPrinterSetupStatus));
2014-01-29 19:09:30 -08:00
Parent.RemoveChild(this);
}
else
{
Parent.AddChild(new SetupStepComPortOne((ConnectionWindow)Parent, Parent, this.currentPrinterSetupStatus));
2014-01-29 19:09:30 -08:00
Parent.RemoveChild(this);
}
}
void NextButton_Click(object sender, EventArgs mouseEvent)
2014-01-29 19:09:30 -08:00
{
2014-01-29 19:09:30 -08:00
bool canContinue = this.OnSave();
if (canContinue)
{
this.currentPrinterSetupStatus.LoadCalibrationPrints();
2014-01-29 19:09:30 -08:00
UiThread.RunOnIdle(MoveToNextWidget);
}
}
public int ExistingPrinterCount()
{
string query = string.Format("SELECT COUNT(*) FROM Printer;");
string result = Datastore.Instance.dbSQLite.ExecuteScalar<string>(query);
return Convert.ToInt32(result);
}
2014-01-29 19:09:30 -08:00
bool OnSave()
{
if (printerNameInput.Text != "")
{
this.ActivePrinter.Name = printerNameInput.Text;
if (this.ActivePrinter.Make == null || this.ActivePrinter.Model == null)
{
return false;
}
else
{
currentPrinterSetupStatus.Save();
2014-01-29 19:09:30 -08:00
return true;
}
}
else
{
this.printerNameError.TextColor = RGBA_Bytes.Red;
this.printerNameError.Text = "Printer name cannot be blank";
2014-01-29 19:09:30 -08:00
this.printerNameError.Visible = true;
return false;
}
}
}
}