Reducing complexity of settings ui sync
Adding bed menu to load filament
This commit is contained in:
parent
fa86c58a7c
commit
412c3d2a9e
7 changed files with 118 additions and 171 deletions
|
|
@ -37,17 +37,12 @@ using MatterHackers.ImageProcessing;
|
|||
using MatterHackers.Localizations;
|
||||
using MatterHackers.MatterControl.ConfigurationPage;
|
||||
using MatterHackers.MatterControl.CustomWidgets;
|
||||
using MatterHackers.MatterControl.PrinterCommunication;
|
||||
using MatterHackers.MatterControl.SlicerConfiguration;
|
||||
|
||||
namespace MatterHackers.MatterControl.ActionBar
|
||||
{
|
||||
internal class TemperatureWidgetBed : TemperatureWidgetBase
|
||||
internal class TemperatureWidgetBed : TemperatureWidgetBase
|
||||
{
|
||||
private string sliceSettingsNote = "Note: Slice Settings are applied before the print actually starts. Changes while printing will not effect the active print.".Localize();
|
||||
private string waitingForBedToHeatMessage = "The bed is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting bed temperature in SETTINGS -> Filament -> Temperatures.\n\n{1}".Localize();
|
||||
private string waitingForBedToHeatTitle = "Waiting For Bed To Heat".Localize();
|
||||
private Dictionary<string, UIField> allUiFields = new Dictionary<string, UIField>();
|
||||
private RunningInterval runningInterval;
|
||||
|
||||
public TemperatureWidgetBed(PrinterConfig printer, ThemeConfig theme)
|
||||
|
|
@ -154,7 +149,7 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
bedSettingBeingEdited = printer.Settings.Helpers.ActiveBedTemperatureSetting;
|
||||
|
||||
var settingsData = PrinterSettings.SettingsData[bedSettingBeingEdited];
|
||||
var bedTemperature = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex, allUiFields);
|
||||
var bedTemperature = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex);
|
||||
|
||||
var settingsRow = bedTemperature.DescendantsAndSelf<SliceSettingsRow>().FirstOrDefault();
|
||||
|
||||
|
|
@ -187,27 +182,6 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
graph.AddData(this.ActualTemperature);
|
||||
}, 1);
|
||||
|
||||
void Printer_SettingChanged(object s, StringEventArgs stringEvent)
|
||||
{
|
||||
if (stringEvent != null)
|
||||
{
|
||||
string settingsKey = stringEvent.Data;
|
||||
if (this.allUiFields.TryGetValue(settingsKey, out UIField uifield))
|
||||
{
|
||||
string currentValue = settingsContext.GetValue(settingsKey);
|
||||
if (uifield.Value != currentValue)
|
||||
{
|
||||
uifield.SetValue(
|
||||
currentValue,
|
||||
userInitiated: false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
printer.Settings.SettingChanged += Printer_SettingChanged;
|
||||
printer.Disposed += (s, e) => printer.Settings.SettingChanged -= Printer_SettingChanged;
|
||||
|
||||
container.AddChild(graph);
|
||||
|
||||
return widget;
|
||||
|
|
|
|||
|
|
@ -183,7 +183,6 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
|
||||
private string sliceSettingsNote = "Note: Slice Settings are applied before the print actually starts. Changes while printing will not effect the active print.".Localize();
|
||||
private string waitingForExtruderToHeatMessage = "The extruder is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting extruder temperature in 'Slice Settings' -> 'Filament'.\n\n{1}".Localize();
|
||||
private Dictionary<string, UIField> allUiFields = new Dictionary<string, UIField>();
|
||||
private RunningInterval runningInterval;
|
||||
private ThemeConfig theme;
|
||||
|
||||
|
|
@ -271,7 +270,7 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
|
||||
// TODO: Add guards around computed settings key to handle invalid/missing keys
|
||||
var settingsData = PrinterSettings.SettingsData[TemperatureKey];
|
||||
var temperatureRow = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex, allUiFields);
|
||||
var temperatureRow = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex);
|
||||
container.AddChild(temperatureRow);
|
||||
|
||||
// Add the temperature row to the always enabled list ensuring the field can be set when disconnected
|
||||
|
|
@ -285,8 +284,7 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
settingsContext,
|
||||
printer,
|
||||
menuTheme,
|
||||
ref tabIndex,
|
||||
allUiFields);
|
||||
ref tabIndex);
|
||||
container.AddChild(extruderMultiplier);
|
||||
alwaysEnabled.Add(extruderMultiplier);
|
||||
}
|
||||
|
|
@ -326,18 +324,6 @@ namespace MatterHackers.MatterControl.ActionBar
|
|||
{
|
||||
if (stringEvent != null)
|
||||
{
|
||||
string settingsKey = stringEvent.Data;
|
||||
if (this.allUiFields.TryGetValue(settingsKey, out UIField uifield))
|
||||
{
|
||||
string currentValue = settingsContext.GetValue(settingsKey);
|
||||
if (uifield.Value != currentValue)
|
||||
{
|
||||
uifield.SetValue(
|
||||
currentValue,
|
||||
userInitiated: false);
|
||||
}
|
||||
}
|
||||
|
||||
if (stringEvent.Data == this.TemperatureKey)
|
||||
{
|
||||
graph.GoalValue = printer.Settings.Helpers.ExtruderTargetTemperature(hotendIndex);
|
||||
|
|
|
|||
|
|
@ -29,8 +29,10 @@ either expressed or implied, of the FreeBSD Project.
|
|||
|
||||
using MatterHackers.Agg;
|
||||
using MatterHackers.Localizations;
|
||||
using MatterHackers.MatterControl.ActionBar;
|
||||
using MatterHackers.MatterControl.CustomWidgets;
|
||||
using MatterHackers.MatterControl.SlicerConfiguration;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
||||
{
|
||||
|
|
@ -46,6 +48,16 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
Margin = new BorderDouble(0, 0, 0, 15)
|
||||
});
|
||||
|
||||
if (showLoadFilamentButton)
|
||||
{
|
||||
int tabIndex = 0;
|
||||
var bedSurfaceChanger = TemperatureWidgetBed.CreateBedSurfaceSelector(printer, theme, ref tabIndex);
|
||||
if (bedSurfaceChanger != null)
|
||||
{
|
||||
contentRow.AddChild(bedSurfaceChanger);
|
||||
}
|
||||
}
|
||||
|
||||
NextButton.Text = nextButtonText;
|
||||
|
||||
if (showLoadFilamentButton)
|
||||
|
|
|
|||
|
|
@ -46,7 +46,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
public class ExportSlaPopupMenu : PopupMenuButton
|
||||
{
|
||||
private PrinterConfig printer;
|
||||
private Dictionary<string, UIField> allUiFields = new Dictionary<string, UIField>();
|
||||
private SettingsContext settingsContext;
|
||||
|
||||
public ExportSlaPopupMenu(PrinterConfig printer, ThemeConfig theme)
|
||||
|
|
@ -73,8 +72,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
int tabIndex = 0;
|
||||
|
||||
allUiFields.Clear();
|
||||
|
||||
var exportPanel = new FlowLayoutWidget(FlowDirection.TopToBottom)
|
||||
{
|
||||
Padding = theme.DefaultContainerPadding,
|
||||
|
|
@ -106,7 +103,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
foreach (var key in settingsToAdd)
|
||||
{
|
||||
var settingsData = PrinterSettings.SettingsData[key];
|
||||
var row = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex, allUiFields);
|
||||
var row = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex);
|
||||
|
||||
if (row is SliceSettingsRow settingsRow)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -49,7 +49,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
public class PrintPopupMenu : PopupMenuButton
|
||||
{
|
||||
private PrinterConfig printer;
|
||||
private Dictionary<string, UIField> allUiFields = new Dictionary<string, UIField>();
|
||||
private SettingsContext settingsContext;
|
||||
|
||||
public PrintPopupMenu(PrinterConfig printer, ThemeConfig theme)
|
||||
|
|
@ -76,8 +75,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
int tabIndex = 0;
|
||||
|
||||
allUiFields.Clear();
|
||||
|
||||
var printPanel = new FlowLayoutWidget(FlowDirection.TopToBottom)
|
||||
{
|
||||
Padding = theme.DefaultContainerPadding,
|
||||
|
|
@ -110,7 +107,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
foreach (var key in settingsToAdd)
|
||||
{
|
||||
var settingsData = PrinterSettings.SettingsData[key];
|
||||
var row = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex, allUiFields);
|
||||
var row = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex);
|
||||
|
||||
if (row is SliceSettingsRow settingsRow)
|
||||
{
|
||||
|
|
@ -145,8 +142,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
settingsContext,
|
||||
printer,
|
||||
menuTheme,
|
||||
ref tabIndex,
|
||||
allUiFields);
|
||||
ref tabIndex);
|
||||
|
||||
if (advancedRow is SliceSettingsRow settingsRow)
|
||||
{
|
||||
|
|
@ -310,9 +306,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
Selectable = false,
|
||||
Padding = theme.TextButtonPadding.Clone(right: 5)
|
||||
});
|
||||
|
||||
// Register listeners
|
||||
printer.Settings.SettingChanged += Printer_SettingChanged;
|
||||
}
|
||||
|
||||
public static GuiWidget CreateStartPrintButton(string buttonText,
|
||||
|
|
@ -355,33 +348,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
return startPrintButton;
|
||||
}
|
||||
|
||||
public override void OnClosed(EventArgs e)
|
||||
{
|
||||
// Unregister listeners
|
||||
printer.Settings.SettingChanged -= Printer_SettingChanged;
|
||||
|
||||
base.OnClosed(e);
|
||||
}
|
||||
|
||||
private void Printer_SettingChanged(object s, StringEventArgs stringEvent)
|
||||
{
|
||||
if (stringEvent != null)
|
||||
{
|
||||
string settingsKey = stringEvent.Data;
|
||||
if (allUiFields.TryGetValue(settingsKey, out UIField uifield))
|
||||
{
|
||||
string currentValue = settingsContext.GetValue(settingsKey);
|
||||
if (uifield.Value != currentValue
|
||||
|| settingsKey == "com_port")
|
||||
{
|
||||
uifield.SetValue(
|
||||
currentValue,
|
||||
userInitiated: false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class IgnoredFlowLayout : FlowLayoutWidget, IIgnoredPopupChild
|
||||
{
|
||||
public IgnoredFlowLayout()
|
||||
|
|
|
|||
|
|
@ -121,7 +121,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
private static readonly Regex NameSanitizer = new Regex("[^a-zA-Z0-9-]", RegexOptions.Compiled);
|
||||
|
||||
private int tabIndexForItem = 0;
|
||||
private readonly Dictionary<string, UIField> allUiFields = new Dictionary<string, UIField>();
|
||||
private readonly ThemeConfig theme;
|
||||
private readonly PrinterConfig printer;
|
||||
private readonly SettingsContext settingsContext;
|
||||
|
|
@ -234,8 +233,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
|
||||
this.settingsRows = new List<(GuiWidget, SliceSettingData)>();
|
||||
|
||||
allUiFields = new Dictionary<string, UIField>();
|
||||
|
||||
var errors = printer.ValidateSettings(settingsContext);
|
||||
|
||||
// Loop over categories creating a tab for each
|
||||
|
|
@ -367,9 +364,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
UserSettings.Instance.set(databaseMRUKey, this.SelectedTabKey);
|
||||
}
|
||||
};
|
||||
|
||||
// Register listeners
|
||||
printer.Settings.SettingChanged += Printer_SettingChanged;
|
||||
}
|
||||
|
||||
this.PerformLayout();
|
||||
|
|
@ -448,8 +442,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
externalExtendMenu?.Invoke(popupMenu);
|
||||
}
|
||||
|
||||
public Dictionary<string, UIField> UIFields => allUiFields;
|
||||
|
||||
public SectionWidget CreateGroupSection(SettingsLayout.Group group, List<ValidationError> errors)
|
||||
{
|
||||
var groupPanel = new FlowLayoutWidget(FlowDirection.TopToBottom)
|
||||
|
|
@ -613,10 +605,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
|
||||
internal GuiWidget CreateItemRow(SliceSettingData settingData, List<ValidationError> errors)
|
||||
{
|
||||
return CreateItemRow(settingData, settingsContext, printer, theme, ref tabIndexForItem, allUiFields, errors);
|
||||
return CreateItemRow(settingData, settingsContext, printer, theme, ref tabIndexForItem, errors);
|
||||
}
|
||||
|
||||
public static GuiWidget CreateItemRow(SliceSettingData settingData, SettingsContext settingsContext, PrinterConfig printer, ThemeConfig theme, ref int tabIndexForItem, Dictionary<string, UIField> fieldCache = null, List<ValidationError> errors = null)
|
||||
public static GuiWidget CreateItemRow(SliceSettingData settingData, SettingsContext settingsContext, PrinterConfig printer, ThemeConfig theme, ref int tabIndexForItem, List<ValidationError> errors = null)
|
||||
{
|
||||
string sliceSettingValue = settingsContext.GetValue(settingData.SlicerConfigName);
|
||||
|
||||
|
|
@ -819,61 +811,58 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
}
|
||||
|
||||
if (uiField != null)
|
||||
{
|
||||
if (fieldCache != null)
|
||||
{
|
||||
fieldCache[settingData.SlicerConfigName] = uiField;
|
||||
}
|
||||
{
|
||||
uiField.HelpText = settingData.HelpText;
|
||||
|
||||
uiField.HelpText = settingData.HelpText;
|
||||
uiField.Name = $"{settingData.PresentationName} Field";
|
||||
uiField.Initialize(tabIndexForItem++);
|
||||
|
||||
uiField.Name = $"{settingData.PresentationName} Field";
|
||||
uiField.Initialize(tabIndexForItem++);
|
||||
if (settingData.DataEditType == SliceSettingData.DataEditTypes.WIDE_STRING)
|
||||
{
|
||||
uiField.Content.HAnchor = HAnchor.Stretch;
|
||||
placeFieldInDedicatedRow = true;
|
||||
}
|
||||
|
||||
if (settingData.DataEditType == SliceSettingData.DataEditTypes.WIDE_STRING)
|
||||
{
|
||||
uiField.Content.HAnchor = HAnchor.Stretch;
|
||||
placeFieldInDedicatedRow = true;
|
||||
}
|
||||
uiField.SetValue(sliceSettingValue, userInitiated: false);
|
||||
|
||||
uiField.SetValue(sliceSettingValue, userInitiated: false);
|
||||
// Disable ToolTipText on UIFields in favor of popovers
|
||||
uiField.Content.ToolTipText = "";
|
||||
|
||||
// Disable ToolTipText on UIFields in favor of popovers
|
||||
uiField.Content.ToolTipText = "";
|
||||
RegisterSettingChangeEvent(printer, uiField, settingData.SlicerConfigName, settingsContext);
|
||||
|
||||
// make sure the undo data goes back to the initial value after a change
|
||||
uiField.ClearUndoHistory();
|
||||
// make sure the undo data goes back to the initial value after a change
|
||||
uiField.ClearUndoHistory();
|
||||
|
||||
uiField.ValueChanged += (s, e) =>
|
||||
{
|
||||
if (useDefaultSavePattern
|
||||
&& e.UserInitiated)
|
||||
{
|
||||
settingsContext.SetValue(settingData.SlicerConfigName, uiField.Value);
|
||||
}
|
||||
uiField.ValueChanged += (s, e) =>
|
||||
{
|
||||
if (useDefaultSavePattern
|
||||
&& e.UserInitiated)
|
||||
{
|
||||
settingsContext.SetValue(settingData.SlicerConfigName, uiField.Value);
|
||||
}
|
||||
|
||||
settingsRow.UpdateStyle();
|
||||
};
|
||||
settingsRow.UpdateStyle();
|
||||
};
|
||||
|
||||
// After initializing the field, wrap with dropmenu if applicable
|
||||
if (settingData.QuickMenuSettings.Count > 0)
|
||||
{
|
||||
var dropMenu = new DropMenuWrappedField(uiField, settingData, theme.TextColor, theme, printer);
|
||||
dropMenu.Initialize(tabIndexForItem);
|
||||
// After initializing the field, wrap with dropmenu if applicable
|
||||
if (settingData.QuickMenuSettings.Count > 0)
|
||||
{
|
||||
var dropMenu = new DropMenuWrappedField(uiField, settingData, theme.TextColor, theme, printer);
|
||||
dropMenu.Initialize(tabIndexForItem);
|
||||
|
||||
settingsRow.AddContent(dropMenu.Content);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!placeFieldInDedicatedRow)
|
||||
{
|
||||
settingsRow.AddContent(uiField.Content);
|
||||
settingsRow.ActionWidget = uiField.Content;
|
||||
}
|
||||
}
|
||||
}
|
||||
settingsRow.AddContent(dropMenu.Content);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!placeFieldInDedicatedRow)
|
||||
{
|
||||
settingsRow.AddContent(uiField.Content);
|
||||
settingsRow.ActionWidget = uiField.Content;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
settingsRow.UIField = uiField;
|
||||
settingsRow.UIField = uiField;
|
||||
uiField.Row = settingsRow;
|
||||
|
||||
if (errors?.Any() == true)
|
||||
|
|
@ -937,7 +926,47 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
}
|
||||
}
|
||||
|
||||
public void FilterToOverrides(IEnumerable<PrinterSettingsLayer> layers)
|
||||
private static void RegisterSettingChangeEvent(PrinterConfig printer, UIField uiField, string boundSettingsKey, SettingsContext settingsContext)
|
||||
{
|
||||
void Printer_SettingChanged(object s, StringEventArgs stringEvent)
|
||||
{
|
||||
var localUiField = uiField;
|
||||
var errors2 = printer.ValidateSettings(settingsContext);
|
||||
|
||||
if (stringEvent != null)
|
||||
{
|
||||
string settingsKey = stringEvent.Data;
|
||||
if (settingsKey == boundSettingsKey)
|
||||
{
|
||||
string currentValue = settingsContext.GetValue(settingsKey);
|
||||
if (localUiField.Value != currentValue
|
||||
|| settingsKey == "com_port")
|
||||
{
|
||||
localUiField.SetValue(
|
||||
currentValue,
|
||||
userInitiated: false);
|
||||
}
|
||||
|
||||
// Some fields are hosted outside of SettingsRows (e.g. Section Headers like Brim) and should skip validation updates
|
||||
localUiField.Row?.UpdateValidationState(errors2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Register listeners
|
||||
printer.Settings.SettingChanged += Printer_SettingChanged;
|
||||
|
||||
uiField.Content.Closed += (s, e) =>
|
||||
{
|
||||
// Unregister listeners
|
||||
printer.Settings.SettingChanged -= Printer_SettingChanged;
|
||||
};
|
||||
|
||||
// remove listener if print disposed
|
||||
printer.Disposed += (s, e) => printer.Settings.SettingChanged -= Printer_SettingChanged;
|
||||
}
|
||||
|
||||
public void FilterToOverrides(IEnumerable<PrinterSettingsLayer> layers)
|
||||
{
|
||||
foreach (var item in this.settingsRows)
|
||||
{
|
||||
|
|
@ -955,30 +984,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
private readonly List<SectionWidget> widgetsThatWereExpanded = new List<SectionWidget>();
|
||||
private SystemWindow systemWindow;
|
||||
|
||||
private void Printer_SettingChanged(object s, StringEventArgs stringEvent)
|
||||
{
|
||||
var errors = printer.ValidateSettings(settingsContext);
|
||||
|
||||
if (stringEvent != null)
|
||||
{
|
||||
string settingsKey = stringEvent.Data;
|
||||
if (this.allUiFields.TryGetValue(settingsKey, out UIField uifield))
|
||||
{
|
||||
string currentValue = settingsContext.GetValue(settingsKey);
|
||||
if (uifield.Value != currentValue
|
||||
|| settingsKey == "com_port")
|
||||
{
|
||||
uifield.SetValue(
|
||||
currentValue,
|
||||
userInitiated: false);
|
||||
}
|
||||
|
||||
// Some fields are hosted outside of SettingsRows (e.g. Section Headers like Brim) and should skip validation updates
|
||||
uifield.Row?.UpdateValidationState(errors);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowFilteredView()
|
||||
{
|
||||
widgetsThatWereExpanded.Clear();
|
||||
|
|
@ -1005,14 +1010,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
this.Focus();
|
||||
}
|
||||
|
||||
public override void OnClosed(EventArgs e)
|
||||
{
|
||||
// Unregister listeners
|
||||
printer.Settings.SettingChanged -= Printer_SettingChanged;
|
||||
|
||||
base.OnClosed(e);
|
||||
}
|
||||
|
||||
public void ClearFilter()
|
||||
{
|
||||
foreach (var item in this.settingsRows)
|
||||
|
|
|
|||
|
|
@ -22,6 +22,9 @@ Translated:$/kg
|
|||
English:%
|
||||
Translated:%
|
||||
|
||||
English:{0} (Update Available)
|
||||
Translated:{0} (Update Available)
|
||||
|
||||
English:{0} should be greater than 0.
|
||||
Translated:{0} should be greater than 0.
|
||||
|
||||
|
|
@ -520,6 +523,9 @@ Translated:Clear Cache
|
|||
English:Clear Height
|
||||
Translated:Clear Height
|
||||
|
||||
English:Clear Material Setting
|
||||
Translated:Clear Material Setting
|
||||
|
||||
English:Clear Override
|
||||
Translated:Clear Override
|
||||
|
||||
|
|
@ -2365,6 +2371,9 @@ Translated:Please select the material you want to load into extruder {0}.
|
|||
English:Please select the material you want to load.
|
||||
Translated:Please select the material you want to load.
|
||||
|
||||
English:Please select the material you want to unload.
|
||||
Translated:Please select the material you want to unload.
|
||||
|
||||
English:Please sign in to continue.
|
||||
Translated:Please sign in to continue.
|
||||
|
||||
|
|
@ -3988,9 +3997,15 @@ Translated:Unload
|
|||
English:Unload filament
|
||||
Translated:Unload filament
|
||||
|
||||
English:Unload Filament
|
||||
Translated:Unload Filament
|
||||
|
||||
English:Unload Filament Length
|
||||
Translated:Unload Filament Length
|
||||
|
||||
English:Unload Material
|
||||
Translated:Unload Material
|
||||
|
||||
English:Unpin
|
||||
Translated:Unpin
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue