improving right click settings menu

This commit is contained in:
LarsBrubaker 2020-08-29 20:56:01 -07:00
parent e49deacdec
commit 1e852a7531
2 changed files with 62 additions and 52 deletions

View file

@ -48,7 +48,6 @@ namespace MatterHackers.MatterControl.CustomWidgets
protected bool mouseInBounds = false;
private Color hoverColor;
private GuiWidget settingsLabel;
private Popover popoverBubble = null;
private static Popover activePopover = null;
@ -104,7 +103,9 @@ namespace MatterHackers.MatterControl.CustomWidgets
});
}
this.AddChild(settingsLabel = SettingsRow.CreateSettingsLabel(title, helpText, theme.TextColor));
var textLabel = SettingsRow.CreateSettingsLabel(title, helpText, theme.TextColor);
this.AddChild(textLabel);
textLabel.Selectable = false;
this.AddChild(new HorizontalSpacer());
}
@ -175,7 +176,7 @@ namespace MatterHackers.MatterControl.CustomWidgets
public override Color BackgroundColor
{
get => (mouseInBounds) ? hoverColor : base.BackgroundColor;
get => mouseInBounds ? hoverColor : base.BackgroundColor;
set => base.BackgroundColor = value;
}

View file

@ -74,8 +74,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
#endif
};
private static Popover activePopover = null;
private SettingsContext settingsContext;
private PrinterConfig printer;
@ -237,56 +235,17 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
}
// show a right click menu ('Set as Default' & 'Help')
var popupMenu = new PopupMenu(ApplicationController.Instance.MenuTheme);
var menuTheme = ApplicationController.Instance.MenuTheme;
var popupMenu = new PopupMenu(menuTheme);
var settingName = settingData.SlicerConfigName;
// add menu to set default
{
var setAsDefaultMenuItem = popupMenu.CreateMenuItem("Save to Default".Localize());
setAsDefaultMenuItem.Enabled = !SettingIsOem(); // check if the settings is already the default
setAsDefaultMenuItem.Click += (s, e) =>
{
printer.Settings.OemLayer[settingName] = printer.Settings.GetValue(settingName);
UpdateStyle();
printer.Settings.Save();
};
}
// add menu item to set quality
{
var setAsQualityMenuItem = popupMenu.CreateMenuItem("Save to Quality".Localize());
setAsQualityMenuItem.Enabled = printer.Settings.QualityLayer != null
&& !SettingIsSameAsLayer(printer.Settings.QualityLayer);
setAsQualityMenuItem.Click += (s, e) =>
{
printer.Settings.QualityLayer[settingName] = printer.Settings.GetValue(settingName);
printer.Settings.UserLayer.Remove(settingName);
UpdateStyle();
printer.Settings.Save();
};
}
// add menu item to set material
{
var setAsMaterialMenuItem = popupMenu.CreateMenuItem("Save to Material".Localize());
setAsMaterialMenuItem.Enabled = printer.Settings.MaterialLayer != null
&& !SettingIsSameAsLayer(printer.Settings.MaterialLayer);
setAsMaterialMenuItem.Click += (s, e) =>
{
printer.Settings.MaterialLayer[settingName] = printer.Settings.GetValue(settingName);
printer.Settings.UserLayer.Remove(settingName);
UpdateStyle();
printer.Settings.Save();
};
}
popupMenu.CreateSeparator();
var enableClearUser = printer.Settings.UserLayer.ContainsKey(settingName);
var enableClearMaterial = printer.Settings.MaterialLayer?.ContainsKey(settingName) == true;
var enableClearQuality = printer.Settings.QualityLayer?.ContainsKey(settingName) == true;
// put in clear layer menu items
{
var clearSettingMenuItem = popupMenu.CreateMenuItem("Clear Override".Localize());
clearSettingMenuItem.Enabled = printer.Settings.UserLayer.ContainsKey(settingName);
clearSettingMenuItem.Enabled = enableClearUser;
clearSettingMenuItem.Click += (s, e) =>
{
new SettingsContext(printer,
@ -298,9 +257,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
}
// quality
if (enableClearQuality)
{
var clearSettingMenuItem = popupMenu.CreateMenuItem("Clear Quality Setting".Localize());
clearSettingMenuItem.Enabled = printer.Settings.QualityLayer?.ContainsKey(settingName) == true;
clearSettingMenuItem.Enabled = enableClearQuality;
clearSettingMenuItem.Click += (s, e) =>
{
new SettingsContext(printer,
@ -312,9 +272,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
}
// material
if (enableClearMaterial)
{
var clearSettingMenuItem = popupMenu.CreateMenuItem("Clear Material Setting".Localize());
clearSettingMenuItem.Enabled = printer.Settings.MaterialLayer?.ContainsKey(settingName) == true;
clearSettingMenuItem.Enabled = enableClearMaterial;
clearSettingMenuItem.Click += (s, e) =>
{
new SettingsContext(printer,
@ -325,6 +286,54 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
};
}
if (enableClearMaterial || enableClearQuality || enableClearUser)
{
popupMenu.CreateSeparator();
popupMenu.CreateSubMenu("Save to", menuTheme, (subMenu) =>
{
// add menu to set default
{
var setAsDefaultMenuItem = subMenu.CreateMenuItem("Printer Default".Localize());
setAsDefaultMenuItem.Enabled = !SettingIsOem(); // check if the settings is already the default
setAsDefaultMenuItem.Click += (s, e) =>
{
printer.Settings.OemLayer[settingName] = printer.Settings.GetValue(settingName);
UpdateStyle();
printer.Settings.Save();
};
}
// add menu item to set quality
{
var setAsQualityMenuItem = subMenu.CreateMenuItem("Quality Setting".Localize());
setAsQualityMenuItem.Enabled = printer.Settings.QualityLayer != null
&& !SettingIsSameAsLayer(printer.Settings.QualityLayer);
setAsQualityMenuItem.Click += (s, e) =>
{
printer.Settings.QualityLayer[settingName] = printer.Settings.GetValue(settingName);
printer.Settings.UserLayer.Remove(settingName);
UpdateStyle();
printer.Settings.Save();
};
}
// add menu item to set material
{
var setAsMaterialMenuItem = subMenu.CreateMenuItem("Material Setting".Localize());
setAsMaterialMenuItem.Enabled = printer.Settings.MaterialLayer != null
&& !SettingIsSameAsLayer(printer.Settings.MaterialLayer);
setAsMaterialMenuItem.Click += (s, e) =>
{
printer.Settings.MaterialLayer[settingName] = printer.Settings.GetValue(settingName);
printer.Settings.UserLayer.Remove(settingName);
UpdateStyle();
printer.Settings.Save();
};
}
});
}
popupMenu.ShowMenu(this, mouseEvent);
popupMenu.Closed += (s, e) => KeepMenuOpen = false;