Move MatterControl settings to dedicated DialogPage

This commit is contained in:
John Lewin 2018-09-29 15:03:54 -07:00
parent 0cc0530ca0
commit ab7a5c5292
3 changed files with 407 additions and 242 deletions

View file

@ -43,7 +43,7 @@ namespace MatterHackers.MatterControl.ConfigurationPage
{
public class ApplicationSettingsWidget : FlowLayoutWidget, IIgnoredPopupChild
{
public static Action OpenPrintNotification = null;
public static Action<DialogWindow> OpenPrintNotification = null;
private ThemeConfig theme;
@ -55,246 +55,14 @@ namespace MatterHackers.MatterControl.ConfigurationPage
this.BackgroundColor = theme.Colors.PrimaryBackgroundColor;
this.theme = theme;
var configureIcon = AggContext.StaticData.LoadIcon("fa-cog_16.png", 16, 16, theme.InvertIcons);
#if __ANDROID__
// Camera Monitoring
bool hasCamera = true || ApplicationSettings.Instance.get(ApplicationSettingsKey.HardwareHasCamera) == "true";
var previewButton = new IconButton(configureIcon, theme)
{
ToolTipText = "Configure Camera View".Localize()
};
previewButton.Click += (s, e) =>
{
AppContext.Platform.OpenCameraPreview();
};
this.AddSettingsRow(
new SettingsItem(
"Camera Monitoring".Localize(),
theme,
new SettingsItem.ToggleSwitchConfig()
{
Checked = ActiveSliceSettings.Instance.GetValue<bool>(SettingsKey.publish_bed_image),
ToggleAction = (itemChecked) =>
{
ActiveSliceSettings.Instance.SetValue(SettingsKey.publish_bed_image, itemChecked ? "1" : "0");
}
},
previewButton,
AggContext.StaticData.LoadIcon("camera-24x24.png", 24, 24))
);
#endif
// Print Notifications
var configureNotificationsButton = new IconButton(configureIcon, theme)
{
Name = "Configure Notification Settings Button",
ToolTipText = "Configure Notifications".Localize(),
Margin = new BorderDouble(left: 6),
VAnchor = VAnchor.Center
};
configureNotificationsButton.Click += (s, e) =>
{
if (OpenPrintNotification != null)
{
UiThread.RunOnIdle(OpenPrintNotification);
}
};
AddMenuItem("Help".Localize(), ApplicationController.Instance.ShowApplicationHelp);
this.AddSettingsRow(
new SettingsItem(
"Notifications".Localize(),
theme,
new SettingsItem.ToggleSwitchConfig()
{
Checked = UserSettings.Instance.get(UserSettingsKey.PrintNotificationsEnabled) == "true",
ToggleAction = (itemChecked) =>
{
UserSettings.Instance.set(UserSettingsKey.PrintNotificationsEnabled, itemChecked ? "true" : "false");
}
},
configureNotificationsButton,
AggContext.StaticData.LoadIcon("notify-24x24.png")));
// Touch Screen Mode
this.AddSettingsRow(
new SettingsItem(
"Touch Screen Mode".Localize(),
theme,
new SettingsItem.ToggleSwitchConfig()
{
Checked = UserSettings.Instance.get(UserSettingsKey.ApplicationDisplayMode) == "touchscreen",
ToggleAction = (itemChecked) =>
{
string displayMode = itemChecked ? "touchscreen" : "responsive";
if (displayMode != UserSettings.Instance.get(UserSettingsKey.ApplicationDisplayMode))
{
UserSettings.Instance.set(UserSettingsKey.ApplicationDisplayMode, displayMode);
ApplicationController.Instance.ReloadAll();
}
}
}));
// LanguageControl
var languageSelector = new LanguageSelector(theme);
languageSelector.SelectionChanged += (s, e) =>
{
UiThread.RunOnIdle(() =>
{
string languageCode = languageSelector.SelectedValue;
if (languageCode != UserSettings.Instance.get(UserSettingsKey.Language))
{
UserSettings.Instance.set(UserSettingsKey.Language, languageCode);
if (languageCode == "L10N")
{
#if DEBUG
AppContext.Platform.GenerateLocalizationValidationFile();
#endif
}
ApplicationController.Instance.ResetTranslationMap();
ApplicationController.Instance.ReloadAll();
}
});
};
this.AddSettingsRow(new SettingsItem("Language".Localize(), languageSelector, theme));
#if !__ANDROID__
// ThumbnailRendering
var thumbnailsModeDropList = new DropDownList("", theme.Colors.PrimaryTextColor, maxHeight: 200, pointSize: theme.DefaultFontSize)
{
BorderColor = theme.GetBorderColor(75)
};
thumbnailsModeDropList.AddItem("Flat".Localize(), "orthographic");
thumbnailsModeDropList.AddItem("3D".Localize(), "raytraced");
thumbnailsModeDropList.SelectedValue = UserSettings.Instance.ThumbnailRenderingMode;
thumbnailsModeDropList.SelectionChanged += (s, e) =>
{
string thumbnailRenderingMode = thumbnailsModeDropList.SelectedValue;
if (thumbnailRenderingMode != UserSettings.Instance.ThumbnailRenderingMode)
{
UserSettings.Instance.ThumbnailRenderingMode = thumbnailRenderingMode;
UiThread.RunOnIdle(() =>
{
// Ask if the user they would like to rebuild their thumbnails
StyledMessageBox.ShowMessageBox(
(bool rebuildThumbnails) =>
{
if (rebuildThumbnails)
{
string[] thumbnails = new string[]
{
ApplicationController.CacheablePath(
Path.Combine("Thumbnails", "Content"), ""),
ApplicationController.CacheablePath(
Path.Combine("Thumbnails", "Library"), "")
};
foreach (var directoryToRemove in thumbnails)
{
try
{
if (Directory.Exists(directoryToRemove))
{
Directory.Delete(directoryToRemove, true);
}
}
catch (Exception)
{
GuiWidget.BreakInDebugger();
}
Directory.CreateDirectory(directoryToRemove);
}
ApplicationController.Instance.Library.NotifyContainerChanged();
}
},
"You are switching to a different thumbnail rendering mode. If you want, your current thumbnails can be removed and recreated in the new style. You can switch back and forth at any time. There will be some processing overhead while the new thumbnails are created.\n\nDo you want to rebuild your existing thumbnails now?".Localize(),
"Rebuild Thumbnails Now".Localize(),
StyledMessageBox.MessageType.YES_NO,
"Rebuild".Localize());
});
}
};
this.AddSettingsRow(
new SettingsItem(
"Thumbnails".Localize(),
thumbnailsModeDropList,
theme));
#endif
// TextSize
if (!double.TryParse(UserSettings.Instance.get(UserSettingsKey.ApplicationTextSize), out double currentTextSize))
{
currentTextSize = 1.0;
}
double sliderThumbWidth = 10 * GuiWidget.DeviceScale;
double sliderWidth = 100 * GuiWidget.DeviceScale;
var textSizeSlider = new SolidSlider(new Vector2(), sliderThumbWidth, .7, 1.4)
{
Name = "Text Size Slider",
Margin = new BorderDouble(5, 0),
Value = currentTextSize,
HAnchor = HAnchor.Stretch,
VAnchor = VAnchor.Center,
TotalWidthInPixels = sliderWidth,
};
var optionalContainer = new FlowLayoutWidget()
{
VAnchor = VAnchor.Center | VAnchor.Fit,
HAnchor = HAnchor.Fit
};
TextWidget sectionLabel = null;
var textSizeApplyButton = new TextButton("Apply".Localize(), theme)
{
VAnchor = VAnchor.Center,
BackgroundColor = theme.SlightShade,
Visible = false,
Margin = new BorderDouble(right: 6)
};
textSizeApplyButton.Click += (s, e) =>
{
GuiWidget.DeviceScale = textSizeSlider.Value;
ApplicationController.Instance.ReloadAll();
};
optionalContainer.AddChild(textSizeApplyButton);
textSizeSlider.ValueChanged += (s, e) =>
{
double textSizeNew = textSizeSlider.Value;
UserSettings.Instance.set(UserSettingsKey.ApplicationTextSize, textSizeNew.ToString("0.0"));
sectionLabel.Text = "Text Size".Localize() + $" : {textSizeNew:0.0}";
textSizeApplyButton.Visible = textSizeNew != currentTextSize;
};
var section = new SettingsItem(
"Text Size".Localize() + $" : {currentTextSize:0.0}",
textSizeSlider,
theme,
optionalContainer);
sectionLabel = section.Children<TextWidget>().FirstOrDefault();
this.AddSettingsRow(section);
AddMenuItem("Forums".Localize(), () => ApplicationController.Instance.LaunchBrowser("https://forums.matterhackers.com/category/20/mattercontrol"));
AddMenuItem("Wiki".Localize(), () => ApplicationController.Instance.LaunchBrowser("http://wiki.mattercontrol.com"));
AddMenuItem("Guides and Articles".Localize(), () => ApplicationController.Instance.LaunchBrowser("http://www.matterhackers.com/topic/mattercontrol"));
AddMenuItem("Release Notes".Localize(), () => ApplicationController.Instance.LaunchBrowser("http://wiki.mattercontrol.com/Release_Notes"));
AddMenuItem("Report a Bug".Localize(), () => ApplicationController.Instance.LaunchBrowser("https://github.com/MatterHackers/MatterControl/issues"));
AddMenuItem("Settings".Localize(), () => DialogWindow.Show<ApplicationSettingsPage>());
var updateMatterControl = new SettingsItem("Check For Update".Localize(), theme);
updateMatterControl.Click += (s, e) =>