mattercontrol/PrinterControls/PrinterConnections/SetupStepMakeModelName.cs

305 lines
8.8 KiB
C#
Raw Normal View History

using System;
2015-04-08 15:20:10 -07:00
using System.Collections.Generic;
using System.Linq;
using MatterHackers.Agg;
using MatterHackers.Agg.Platform;
using MatterHackers.Agg.UI;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.CustomWidgets;
using MatterHackers.MatterControl.SettingsManagement;
2016-04-18 11:31:31 -07:00
using MatterHackers.MatterControl.SlicerConfiguration;
2014-01-29 19:09:30 -08:00
namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
2015-04-08 15:20:10 -07:00
{
//Normally step one of the setup process
2016-06-08 09:31:26 -07:00
public class SetupStepMakeModelName : ConnectionWizardPage
2015-04-08 15:20:10 -07:00
{
private FlowLayoutWidget printerModelContainer;
private FlowLayoutWidget printerMakeContainer;
private MHTextEditWidget printerNameInput;
private TextWidget printerNameError;
private Button nextButton;
private bool usingDefaultName;
private static BorderDouble elementMargin = new BorderDouble(top: 3);
private BoundDropList printerManufacturerSelector;
private BoundDropList printerModelSelector;
string activeMake;
string activeModel;
string activeName;
public SetupStepMakeModelName()
2015-04-08 15:20:10 -07:00
{
printerManufacturerSelector = new BoundDropList(string.Format("- {0} -", "Select Make".Localize()), maxHeight: 200)
2015-04-08 15:20:10 -07:00
{
HAnchor = HAnchor.Stretch,
Margin = elementMargin,
Name = "Select Make",
ListSource = OemSettings.Instance.AllOems,
TabStop = true
};
2015-04-08 15:20:10 -07:00
printerManufacturerSelector.SelectionChanged += ManufacturerDropList_SelectionChanged;
printerMakeContainer = CreateSelectionContainer(
"Make".Localize() + ":",
"Select the printer manufacturer".Localize(),
printerManufacturerSelector);
printerModelSelector = new BoundDropList(string.Format("- {0} -", "Select Model".Localize()), maxHeight: 200)
2015-04-08 15:20:10 -07:00
{
Name = "Select Model",
HAnchor = HAnchor.Stretch,
Margin = elementMargin,
TabStop = true
};
printerModelSelector.SelectionChanged += ModelDropList_SelectionChanged;
printerModelContainer = CreateSelectionContainer("Model".Localize() + ":", "Select the printer model".Localize(), printerModelSelector);
2015-04-08 15:20:10 -07:00
//Add inputs to main container
contentRow.AddChild(printerMakeContainer);
contentRow.AddChild(printerModelContainer);
contentRow.AddChild(createPrinterNameContainer());
2015-04-08 15:20:10 -07:00
//Construct buttons
nextButton = textImageButtonFactory.Generate("Save & Continue".Localize());
nextButton.Name = "Save & Continue Button";
nextButton.Click += async (s, e) =>
2016-04-18 11:31:31 -07:00
{
bool controlsValid = this.ValidateControls();
if (controlsValid)
2016-04-18 11:31:31 -07:00
{
bool profileCreated = await ProfileManager.CreateProfileAsync(activeMake, activeModel, activeName);
if(!profileCreated)
{
this.printerNameError.Text = "Error creating profile".Localize();
this.printerNameError.Visible = true;
return;
}
LoadCalibrationPrints();
#if __ANDROID__
UiThread.RunOnIdle(WizardWindow.ChangeToPage<AndroidConnectDevicePage>);
#else
if (AggContext.OperatingSystem == OSType.Windows)
{
UiThread.RunOnIdle(() =>
{
WizardWindow.ChangeToPage<SetupStepInstallDriver>();
});
}
else
{
UiThread.RunOnIdle(() =>
{
WizardWindow.ChangeToPage<SetupStepComPortOne>();
});
}
#endif
2016-04-18 11:31:31 -07:00
}
};
2014-01-29 19:09:30 -08:00
2015-04-08 15:20:10 -07:00
//Add buttons to buttonContainer
footerRow.AddChild(nextButton);
footerRow.AddChild(new HorizontalSpacer());
footerRow.AddChild(cancelButton);
2014-01-29 19:09:30 -08:00
usingDefaultName = true;
if (printerManufacturerSelector.MenuItems.Count == 1)
{
printerManufacturerSelector.SelectedIndex = 0;
}
2016-04-18 11:31:31 -07:00
SetElementVisibility();
2015-04-08 15:20:10 -07:00
}
2014-01-29 19:09:30 -08:00
2016-04-18 11:31:31 -07:00
private void SetElementVisibility()
2015-04-08 15:20:10 -07:00
{
nextButton.Visible = (activeModel != null && this.activeMake != null);
2015-04-08 15:20:10 -07:00
}
2014-01-29 19:09:30 -08:00
2015-04-08 15:20:10 -07:00
private FlowLayoutWidget createPrinterNameContainer()
{
2016-04-18 11:31:31 -07:00
TextWidget printerNameLabel = new TextWidget("Name".Localize() + ":", 0, 0, 12)
{
TextColor = ActiveTheme.Instance.PrimaryTextColor,
HAnchor = HAnchor.Stretch,
Margin = new BorderDouble(0, 4, 0, 1)
2016-04-18 11:31:31 -07:00
};
2014-01-29 19:09:30 -08:00
printerNameInput = new MHTextEditWidget("")
2016-04-18 11:31:31 -07:00
{
HAnchor = HAnchor.Stretch,
2016-04-18 11:31:31 -07:00
};
printerNameInput.KeyPressed += (s, e) => this.usingDefaultName = false;
2014-01-29 19:09:30 -08:00
printerNameError = new TextWidget("", 0, 0, 10)
2016-04-18 11:31:31 -07:00
{
TextColor = ActiveTheme.Instance.PrimaryTextColor,
HAnchor = HAnchor.Stretch,
2016-04-18 11:31:31 -07:00
Margin = new BorderDouble(top: 3)
};
2015-04-08 15:20:10 -07:00
2016-04-18 11:31:31 -07:00
FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.TopToBottom);
container.Margin = new BorderDouble(0, 5);
2015-04-08 15:20:10 -07:00
container.AddChild(printerNameLabel);
container.AddChild(printerNameInput);
container.AddChild(printerNameError);
container.HAnchor = HAnchor.Stretch;
2016-04-18 11:31:31 -07:00
2015-04-08 15:20:10 -07:00
return container;
}
2016-06-03 18:11:51 -07:00
private FlowLayoutWidget CreateSelectionContainer(string labelText, string validationMessage, Agg.UI.DropDownList selector)
2015-04-08 15:20:10 -07:00
{
var sectionLabel = new TextWidget(labelText, 0, 0, 12)
2016-04-18 11:31:31 -07:00
{
TextColor = ActiveTheme.Instance.PrimaryTextColor,
HAnchor = HAnchor.Stretch,
2016-04-18 11:31:31 -07:00
Margin = elementMargin
};
2014-01-29 19:09:30 -08:00
var validationTextWidget = new TextWidget(validationMessage, 0, 0, 10)
2016-04-18 11:31:31 -07:00
{
TextColor = ActiveTheme.Instance.SecondaryAccentColor,
HAnchor = HAnchor.Stretch,
2016-04-18 11:31:31 -07:00
Margin = elementMargin
};
2014-01-29 19:09:30 -08:00
selector.SelectionChanged += (s, e) =>
2016-04-18 11:31:31 -07:00
{
validationTextWidget.Visible = selector.SelectedLabel.StartsWith("-"); // The default values have "- Title -"
2016-04-18 11:31:31 -07:00
};
2014-01-29 19:09:30 -08:00
var container = new FlowLayoutWidget(FlowDirection.TopToBottom)
2016-04-18 11:31:31 -07:00
{
Margin = new BorderDouble(0, 5),
HAnchor = HAnchor.Stretch
2016-04-18 11:31:31 -07:00
};
2015-04-08 15:20:10 -07:00
container.AddChild(sectionLabel);
container.AddChild(selector);
container.AddChild(validationTextWidget);
2016-04-18 11:31:31 -07:00
2015-04-08 15:20:10 -07:00
return container;
}
private void ManufacturerDropList_SelectionChanged(object sender, EventArgs e)
{
2016-07-29 13:47:58 -07:00
activeMake = ((DropDownList)sender).SelectedValue;
activeModel = null;
2015-04-08 15:20:10 -07:00
2016-07-29 13:47:58 -07:00
// Select the dictionary containing the printerName->printerToken mappings for the current OEM
Dictionary<string, PublicDevice> printers;
if (!OemSettings.Instance.OemProfiles.TryGetValue(activeMake, out printers))
{
2016-07-29 13:47:58 -07:00
// Fall back to an empty dictionary if no match
printers = new Dictionary<string, PublicDevice>();
}
2016-07-29 13:47:58 -07:00
// Models - sort dictionary results by key and assign to .ListSource
printerModelSelector.ListSource = printers.OrderBy(p => p.Key).Select(p => new KeyValuePair<string, string>(p.Key, p.Value.ProfileToken)).ToList();
if (printerModelSelector.MenuItems.Count == 1)
{
printerModelSelector.SelectedIndex = 0;
}
2015-04-08 15:20:10 -07:00
contentRow.Invalidate();
SetElementVisibility();
2015-04-08 15:20:10 -07:00
}
private void ModelDropList_SelectionChanged(object sender, EventArgs e)
{
UiThread.RunOnIdle(() =>
2015-04-08 15:20:10 -07:00
{
2016-06-03 18:11:51 -07:00
DropDownList dropList = (DropDownList) sender;
activeModel = dropList.SelectedLabel;
2016-04-18 11:31:31 -07:00
SetElementVisibility();
2015-04-08 15:20:10 -07:00
if (usingDefaultName)
{
// Use ManufacturerDropList.SelectedLabel instead of activeMake to ensure the mapped Unicode values are picked up
string mappedMakeText = printerManufacturerSelector.SelectedLabel;
var existingPrinterNames = ProfileManager.Instance.ActiveProfiles.Select(p => p.Name);
printerNameInput.Text = agg_basics.GetNonCollidingName(existingPrinterNames, $"{mappedMakeText} {activeModel}");
2015-04-08 15:20:10 -07:00
}
});
}
2014-01-29 19:09:30 -08:00
// TODO: Do we still want to do this - constantly adding items to the queue as printers are added? What about a LibraryContainer for '[PrinterName] Calibration Files' - much cleaner to implement, never an extra files on disk or one-time processing that remain becomes inconsistent over time
public void LoadCalibrationPrints()
{
/*
// Load the calibration file names
string calibrationFiles = ActiveSliceSettings.Instance.GetValue("calibration_files");
if(string.IsNullOrEmpty(calibrationFiles))
{
return;
}
string[] calibrationPrintFileNames = calibrationFiles.Split(';');
if (calibrationPrintFileNames.Length < 1)
{
return;
}
var queueItems = QueueData.Instance.GetItemNames();
// Finally, ensure missing calibration parts are added to the queue if missing
var filenamesWithoutExtensions = calibrationPrintFileNames.Select(f => Path.GetFileNameWithoutExtension(f));
foreach (string nameOnly in filenamesWithoutExtensions)
{
if (queueItems.Contains(nameOnly))
{
continue;
}
// Find the first library item with the given name and add it to the queue
PrintItem libraryItem = libraryProvider.GetLibraryItems(nameOnly).FirstOrDefault();
if (libraryItem != null)
{
QueueData.Instance.AddItem(new PrintItemWrapper(libraryItem));
}
}
libraryProvider.Dispose();
*/
}
private bool ValidateControls()
2015-04-08 15:20:10 -07:00
{
2016-04-18 11:31:31 -07:00
if (!string.IsNullOrEmpty(printerNameInput.Text))
2015-04-08 15:20:10 -07:00
{
activeName = printerNameInput.Text;
2016-04-18 11:31:31 -07:00
if (this.activeMake == null || activeModel == null)
2015-04-08 15:20:10 -07:00
{
return false;
}
else
{
return true;
}
}
else
{
this.printerNameError.TextColor = RGBA_Bytes.Red;
this.printerNameError.Text = "Printer name cannot be blank".Localize();
2015-04-08 15:20:10 -07:00
this.printerNameError.Visible = true;
2016-04-18 11:31:31 -07:00
2015-04-08 15:20:10 -07:00
return false;
}
}
}
}