Migrate SlicePresetsWindow to DialogPage

- Issue MatterHackers/MCCentral#3639
Use DialogPage for consistent styling and behavior
This commit is contained in:
John Lewin 2018-06-17 12:22:33 -07:00
parent 14f16a0b06
commit cf1ec25f9e
4 changed files with 69 additions and 95 deletions

View file

@ -59,58 +59,72 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
}
}
public class SlicePresetsWindow : SystemWindow
public class SlicePresetsPage : DialogPage
{
private static Regex numberMatch = new Regex("\\s*\\(\\d+\\)", RegexOptions.Compiled);
private PresetsContext presetsContext;
private PrinterConfig printer;
private GuiWidget middleRow;
private InlineTitleEdit inlineTitleEdit;
public SlicePresetsWindow(PrinterConfig printer, PresetsContext presetsContext)
: base(641, 481)
public SlicePresetsPage(PrinterConfig printer, PresetsContext presetsContext)
{
var theme = ApplicationController.Instance.Theme;
this.presetsContext = presetsContext;
this.printer = printer;
this.AlwaysOnTopOfMain = true;
this.Title = "Slice Presets Editor".Localize();
this.MinimumSize = new Vector2(640, 480);
this.WindowTitle = "Slice Presets Editor".Localize();
this.WindowSize = new Vector2(640, 480);
this.AnchorAll();
var linkButtonFactory = new LinkButtonFactory()
{
fontSize = 8,
textColor = ActiveTheme.Instance.PrimaryAccentColor
};
this.headerRow.Visible = false;
this.contentRow.Padding = 0;
var buttonFactory = theme.ButtonFactory;
contentRow.BackgroundColor = Color.Transparent;
FlowLayoutWidget mainContainer = new FlowLayoutWidget(FlowDirection.TopToBottom)
{
Padding = new BorderDouble(3)
};
mainContainer.AnchorAll();
middleRow = new GuiWidget();
middleRow.AnchorAll();
middleRow.AddChild(CreateSliceSettingsWidget(printer, presetsContext.PersistenceLayer));
inlineTitleEdit = new InlineTitleEdit(presetsContext.PersistenceLayer.Name, theme, presetsContext.LayerType.ToString() + " Name", boldFont: true);
var inlineTitleEdit = new InlineTitleEdit(presetsContext.PersistenceLayer.Name, theme, presetsContext.LayerType.ToString() + " Name", boldFont: true);
inlineTitleEdit.TitleChanged += (s, e) =>
{
printer.Settings.SetValue(SettingsKey.layer_name, inlineTitleEdit.Text, presetsContext.PersistenceLayer);
//ActiveSliceSettings.SettingChanged.CallEvents(null, new StringEventArgs(SettingsKey.layer_name));
};
mainContainer.AddChild(inlineTitleEdit);
contentRow.AddChild(inlineTitleEdit);
mainContainer.AddChild(middleRow);
mainContainer.AddChild(GetBottomRow(buttonFactory));
var sliceSettingsWidget = CreateSliceSettingsWidget(printer, presetsContext.PersistenceLayer);
contentRow.AddChild(sliceSettingsWidget);
this.AddChild(mainContainer);
var duplicateButton = theme.CreateDialogButton("Duplicate".Localize());
duplicateButton.Click += (s, e) =>
{
UiThread.RunOnIdle(() =>
{
string sanitizedName = numberMatch.Replace(inlineTitleEdit.Text, "").Trim();
string newProfileName = agg_basics.GetNonCollidingName(sanitizedName, presetsContext.PresetLayers.Select(preset => preset.ValueOrDefault(SettingsKey.layer_name)));
BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor;
var clonedLayer = presetsContext.PersistenceLayer.Clone();
clonedLayer.Name = newProfileName;
presetsContext.PresetLayers.Add(clonedLayer);
presetsContext.SetAsActive(clonedLayer.LayerID);
presetsContext.PersistenceLayer = clonedLayer;
sliceSettingsWidget.Close();
sliceSettingsWidget = CreateSliceSettingsWidget(printer, clonedLayer);
contentRow.AddChild(sliceSettingsWidget);
inlineTitleEdit.Text = newProfileName;
});
};
this.AddPageAction(duplicateButton);
var deleteButton = theme.CreateDialogButton("Delete".Localize());
deleteButton.Click += (s, e) =>
{
UiThread.RunOnIdle(() =>
{
presetsContext.DeleteLayer();
this.WizardWindow.Close();
});
};
this.AddPageAction(deleteButton);
}
private GuiWidget CreateSliceSettingsWidget(PrinterConfig printer, PrinterSettingsLayer persistenceLayer)
@ -131,58 +145,14 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
};
}
private FlowLayoutWidget GetBottomRow(TextImageButtonFactory buttonFactory)
public override void OnLoad(EventArgs args)
{
var container = new FlowLayoutWidget()
{
HAnchor = HAnchor.Stretch,
Margin = new BorderDouble(top: 3)
};
Button duplicateButton = buttonFactory.Generate("Duplicate".Localize());
duplicateButton.Click += (s, e) =>
{
UiThread.RunOnIdle(() =>
{
string sanitizedName = numberMatch.Replace(inlineTitleEdit.Text, "").Trim();
string newProfileName = agg_basics.GetNonCollidingName(sanitizedName, presetsContext.PresetLayers.Select(preset => preset.ValueOrDefault(SettingsKey.layer_name)));
var clonedLayer = presetsContext.PersistenceLayer.Clone();
clonedLayer.Name = newProfileName;
presetsContext.PresetLayers.Add(clonedLayer);
presetsContext.SetAsActive(clonedLayer.LayerID);
presetsContext.PersistenceLayer = clonedLayer;
middleRow.CloseAllChildren();
middleRow.AddChild(CreateSliceSettingsWidget(printer, clonedLayer));
inlineTitleEdit.Text = newProfileName;
});
};
Button deleteButton = buttonFactory.Generate("Delete".Localize());
deleteButton.Click += (s, e) =>
{
UiThread.RunOnIdle(() =>
{
presetsContext.DeleteLayer();
this.Close();
});
};
Button closeButton = buttonFactory.Generate("Close".Localize());
closeButton.Click += (sender, e) =>
{
this.CloseOnIdle();
};
container.AddChild(duplicateButton);
container.AddChild(deleteButton);
container.AddChild(new HorizontalSpacer());
container.AddChild(closeButton);
return container;
this.WizardWindow.Padding = 0;
footerRow.Padding = theme.DefaultContainerPadding;
footerRow.Margin = 0;
footerRow.Border = new BorderDouble(top: 1);
footerRow.BorderColor = theme.TabBarBackground;
base.OnLoad(args);
}
}
}