add close confirmation message

This commit is contained in:
bluepilledgreat 2025-01-23 23:03:22 +00:00
parent ee377d9938
commit f2f0ec7241
3 changed files with 35 additions and 12 deletions

View File

@ -15,6 +15,7 @@
d:DataContext="{d:DesignInstance dmodels:BootstrapperEditorWindowViewModel, d:DataContext="{d:DesignInstance dmodels:BootstrapperEditorWindowViewModel,
IsDesignTimeCreatable=True}" IsDesignTimeCreatable=True}"
Background="{ui:ThemeResource ApplicationBackgroundBrush}" Background="{ui:ThemeResource ApplicationBackgroundBrush}"
Closing="OnClosing"
ExtendsContentIntoTitleBar="True" ExtendsContentIntoTitleBar="True"
mc:Ignorable="d"> mc:Ignorable="d">
<Grid> <Grid>
@ -40,8 +41,7 @@
Margin="10,10,10,0" Margin="10,10,10,0"
ShowLineNumbers="True" ShowLineNumbers="True"
Style="{StaticResource NewTextEditor}" Style="{StaticResource NewTextEditor}"
SyntaxHighlighting="XML" SyntaxHighlighting="XML" />
TextChanged="OnCodeChanged" />
<ui:Button <ui:Button
Grid.Row="2" Grid.Row="2"

View File

@ -9,6 +9,7 @@ using ICSharpCode.AvalonEdit.Highlighting;
using Bloxstrap.UI.Elements.Base; using Bloxstrap.UI.Elements.Base;
using Bloxstrap.UI.ViewModels.Editor; using Bloxstrap.UI.ViewModels.Editor;
using System.Windows;
namespace Bloxstrap.UI.Elements.Editor namespace Bloxstrap.UI.Elements.Editor
{ {
@ -130,7 +131,8 @@ namespace Bloxstrap.UI.Elements.Editor
} }
} }
CompletionWindow? _completionWindow = null; private BootstrapperEditorWindowViewModel _viewModel;
private CompletionWindow? _completionWindow = null;
public BootstrapperEditorWindow(string name) public BootstrapperEditorWindow(string name)
{ {
@ -141,17 +143,18 @@ namespace Bloxstrap.UI.Elements.Editor
string themeContents = File.ReadAllText(Path.Combine(directory, "Theme.xml")); string themeContents = File.ReadAllText(Path.Combine(directory, "Theme.xml"));
themeContents = ToCRLF(themeContents); // make sure the theme is in CRLF. a function expects CRLF. themeContents = ToCRLF(themeContents); // make sure the theme is in CRLF. a function expects CRLF.
var viewModel = new BootstrapperEditorWindowViewModel(); _viewModel = new BootstrapperEditorWindowViewModel();
viewModel.ThemeSavedCallback = ThemeSavedCallback; _viewModel.ThemeSavedCallback = ThemeSavedCallback;
viewModel.Directory = directory; _viewModel.Directory = directory;
viewModel.Name = name; _viewModel.Name = name;
viewModel.Title = $"Editing \"{name}\""; _viewModel.Title = $"Editing \"{name}\"";
viewModel.Code = themeContents; _viewModel.Code = themeContents;
DataContext = viewModel; DataContext = _viewModel;
InitializeComponent(); InitializeComponent();
UIXML.Text = viewModel.Code; UIXML.Text = _viewModel.Code;
UIXML.TextChanged += OnCodeChanged;
UIXML.TextArea.TextEntered += OnTextAreaTextEntered; UIXML.TextArea.TextEntered += OnTextAreaTextEntered;
LoadHighlightingTheme(); LoadHighlightingTheme();
@ -180,13 +183,30 @@ namespace Bloxstrap.UI.Elements.Editor
return text.Replace("\r\n", "\n").Replace("\r", "\n").Replace("\n", "\r\n"); return text.Replace("\r\n", "\n").Replace("\r", "\n").Replace("\n", "\r\n");
} }
private void OnCodeChanged(object sender, EventArgs e) private void OnCodeChanged(object? sender, EventArgs e)
{ {
BootstrapperEditorWindowViewModel viewModel = (BootstrapperEditorWindowViewModel)DataContext; BootstrapperEditorWindowViewModel viewModel = (BootstrapperEditorWindowViewModel)DataContext;
viewModel.Code = UIXML.Text; viewModel.Code = UIXML.Text;
viewModel.CodeChanged = true;
viewModel.OnPropertyChanged(nameof(viewModel.Code)); viewModel.OnPropertyChanged(nameof(viewModel.Code));
} }
private void OnClosing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (!_viewModel.CodeChanged)
return;
var result = Frontend.ShowMessageBox($"Save changes to {_viewModel.Name}?", MessageBoxImage.Information, MessageBoxButton.YesNoCancel);
if (result == MessageBoxResult.Cancel)
{
e.Cancel = true;
}
else if (result == MessageBoxResult.Yes)
{
_viewModel.SaveCommand.Execute(null);
}
}
private void OnTextAreaTextEntered(object sender, TextCompositionEventArgs e) private void OnTextAreaTextEntered(object sender, TextCompositionEventArgs e)
{ {
switch (e.Text) switch (e.Text)

View File

@ -26,6 +26,8 @@ namespace Bloxstrap.UI.ViewModels.Editor
public string Title { get; set; } = "Editing \"Custom Theme\""; public string Title { get; set; } = "Editing \"Custom Theme\"";
public string Code { get; set; } = ""; public string Code { get; set; } = "";
public bool CodeChanged { get; set; } = false;
private void Preview() private void Preview()
{ {
const string LOG_IDENT = "BootstrapperEditorWindowViewModel::Preview"; const string LOG_IDENT = "BootstrapperEditorWindowViewModel::Preview";
@ -61,6 +63,7 @@ namespace Bloxstrap.UI.ViewModels.Editor
try try
{ {
File.WriteAllText(path, Code); File.WriteAllText(path, Code);
CodeChanged = false;
ThemeSavedCallback.Invoke(true, "Your theme has been saved!"); ThemeSavedCallback.Invoke(true, "Your theme has been saved!");
} }
catch (Exception ex) catch (Exception ex)