mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-21 10:01:27 -07:00
add close confirmation message
This commit is contained in:
parent
ee377d9938
commit
f2f0ec7241
@ -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"
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user