mattercontrol/PrinterControls/PrinterConnections/SetupStepMakeModelName.cs
John Lewin 5db7c79d00 Get updated profiles compiling on Android
- Remove unused properties from ApplicationView
 - Rename CompactApplicationView to TouchscreenView
 - Rename ResponsiveApplicationView to DesktopView
 - Move abstract ToggleTopContainer() specific to TouchscreenView
 - Remove unused HideTopContainer implementations
 - Conditionally compile invocation/assignment of ApplicationMenuRow
 - Migrate single setting from PrinterSettings "PublishBedImage" to SliceSettings
 - Remove PrinterSettings class
 - Import "PublishBedImage" during ImportPrinters
 - Remove code that doubles the size of the splitter bar when collapsed
 - Fix incorrect path to "config.ini"
2016-05-05 12:33:39 -07:00

271 lines
No EOL
8.3 KiB
C#

using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.DataStorage;
using System;
using MatterHackers.MatterControl.SettingsManagement;
using System.Collections.Generic;
using System.Linq;
using MatterHackers.MatterControl.CustomWidgets;
using MatterHackers.MatterControl.SlicerConfiguration;
namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
{
//Normally step one of the setup process
public class SetupStepMakeModelName : SetupConnectionWidgetBase
{
private FlowLayoutWidget printerModelContainer;
private FlowLayoutWidget printerMakeContainer;
private FlowLayoutWidget printerNameContainer;
private MHTextEditWidget printerNameInput;
private TextWidget printerNameError;
private TextWidget printerModelError;
private TextWidget printerMakeError;
private PrinterChooser printerManufacturerSelector;
private Button nextButton;
private bool usingDefaultName;
public SetupStepMakeModelName(ConnectionWizard windowController) : base(windowController)
{
//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();
}
//Add inputs to main container
contentRow.AddChild(printerNameContainer);
contentRow.AddChild(printerMakeContainer);
contentRow.AddChild(printerModelContainer);
//Construct buttons
nextButton = textImageButtonFactory.Generate(LocalizedString.Get("Save & Continue"));
nextButton.Name = "Save & Continue Button";
nextButton.Click += (s, e) =>
{
bool canContinue = this.OnSave();
if (canContinue)
{
UiThread.RunOnIdle(connectionWizard.Close);
}
};
//Add buttons to buttonContainer
footerRow.AddChild(nextButton);
footerRow.AddChild(new HorizontalSpacer());
footerRow.AddChild(cancelButton);
usingDefaultName = true;
SetElementVisibility();
}
private void SetElementVisibility()
{
printerModelContainer.Visible = (this.ActivePrinter.Make != null);
nextButton.Visible = (this.ActivePrinter.Model != null && this.ActivePrinter.Make != null);
}
private FlowLayoutWidget createPrinterNameContainer()
{
TextWidget printerNameLabel = new TextWidget("Name".Localize() + ":", 0, 0, 12)
{
TextColor = ActiveTheme.Instance.PrimaryTextColor,
HAnchor = HAnchor.ParentLeftRight,
Margin = new BorderDouble(0, 0, 0, 1)
};
printerNameInput = new MHTextEditWidget(this.ActivePrinter.Name)
{
HAnchor = HAnchor.ParentLeftRight,
};
printerNameInput.KeyPressed += (s, e) => this.usingDefaultName = false;
printerNameError = new TextWidget("", 0, 0, 10)
{
TextColor = ActiveTheme.Instance.PrimaryTextColor,
HAnchor = HAnchor.ParentLeftRight,
Margin = new BorderDouble(top: 3)
};
FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.TopToBottom);
container.Margin = new BorderDouble(0, 5);
container.AddChild(printerNameLabel);
container.AddChild(printerNameInput);
container.AddChild(printerNameError);
container.HAnchor = HAnchor.ParentLeftRight;
return container;
}
private FlowLayoutWidget createPrinterMakeContainer()
{
BorderDouble elementMargin = new BorderDouble(top: 3);
TextWidget printerManufacturerLabel = new TextWidget("Make".Localize() + ":", 0, 0, 12)
{
TextColor = ActiveTheme.Instance.PrimaryTextColor,
HAnchor = HAnchor.ParentLeftRight,
Margin = elementMargin
};
printerManufacturerSelector = new PrinterChooser()
{
HAnchor = HAnchor.ParentLeftRight,
Margin = elementMargin
};
printerManufacturerSelector.ManufacturerDropList.SelectionChanged += ManufacturerDropList_SelectionChanged;
printerMakeError = new TextWidget("Select the printer manufacturer".Localize(), 0, 0, 10)
{
TextColor = ActiveTheme.Instance.SecondaryAccentColor,
HAnchor = HAnchor.ParentLeftRight,
Margin = elementMargin
};
FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.TopToBottom);
container.Margin = new BorderDouble(0, 5);
container.AddChild(printerManufacturerLabel);
container.AddChild(printerManufacturerSelector);
container.AddChild(printerMakeError);
container.HAnchor = HAnchor.ParentLeftRight;
return container;
}
private FlowLayoutWidget createPrinterModelContainer(string make = "Other")
{
BorderDouble elementMargin = new BorderDouble(top: 3);
TextWidget printerModelLabel = new TextWidget("Model".Localize() + ":", 0, 0, 12)
{
TextColor = ActiveTheme.Instance.PrimaryTextColor,
HAnchor = HAnchor.ParentLeftRight,
Margin = elementMargin
};
ModelChooser printerModelSelector = new ModelChooser(make)
{
HAnchor = HAnchor.ParentLeftRight,
Margin = elementMargin
};
printerModelSelector.ModelDropList.SelectionChanged += new EventHandler(ModelDropList_SelectionChanged);
printerModelSelector.SelectIfOnlyOneModel();
printerModelError = new TextWidget("Select the printer model".Localize(), 0, 0, 10)
{
TextColor = ActiveTheme.Instance.SecondaryAccentColor,
HAnchor = HAnchor.ParentLeftRight,
Margin = elementMargin
};
FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.TopToBottom);
container.Margin = new BorderDouble(0, 5);
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).SelectedValue;
ActivePrinter.Model = null;
ReconstructModelSelector();
SetElementVisibility();
}
private void ReconstructModelSelector()
{
//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(() =>
{
ActivePrinter.Model = ((DropDownList)sender).SelectedLabel;
printerModelError.Visible = false;
SetElementVisibility();
if (usingDefaultName)
{
// Use ManufacturerDropList.SelectedLabel instead of ActivePrinter.Make to ensure the mapped Unicode values are picked up
string mappedMakeText = printerManufacturerSelector.ManufacturerDropList.SelectedLabel;
string printerInputName = String.Format("{0} {1}", mappedMakeText, this.ActivePrinter.Model);
var names = ActiveSliceSettings.ProfileData.Profiles.Where(p => p.Name.StartsWith(printerInputName)).Select(p => p.Name).ToList();
if (!names.Contains(printerInputName))
{
printerNameInput.Text = printerInputName;
}
else
{
int printerModelCount = 1; //Used to keep track of how many of the printer models we run into before and empty one
string possiblePrinterName;
do
{
possiblePrinterName = String.Format("{0} ({1})", printerInputName, printerModelCount++);
} while (names.Contains(possiblePrinterName));
printerNameInput.Text = possiblePrinterName;
}
}
});
}
private bool OnSave()
{
if (!string.IsNullOrEmpty(printerNameInput.Text))
{
this.ActivePrinter.Name = printerNameInput.Text;
if (this.ActivePrinter.Make == null || this.ActivePrinter.Model == null)
{
return false;
}
else
{
ActiveSliceSettings.AcquireNewProfile(ActivePrinter.Make, ActivePrinter.Model, ActivePrinter.Name);
return true;
}
}
else
{
this.printerNameError.TextColor = RGBA_Bytes.Red;
this.printerNameError.Text = "Printer name cannot be blank";
this.printerNameError.Visible = true;
return false;
}
}
}
}