|
|
@@ -64,6 +64,38 @@ namespace InABox.DynamicGrid
|
|
|
private readonly Dictionary<bool, Image> save = SetupImage(Wpf.Resources.disk);
|
|
|
private readonly Dictionary<bool, Image> undo = SetupImage(Wpf.Resources.undo);
|
|
|
|
|
|
+ private readonly Dictionary<bool, Image> errors = SetupImage(Wpf.Resources.delete);
|
|
|
+ private readonly Dictionary<bool, Image> warnings = SetupImage(Wpf.Resources.warning);
|
|
|
+
|
|
|
+ private bool _showErrors;
|
|
|
+ public bool ShowErrors
|
|
|
+ {
|
|
|
+ get => _showErrors;
|
|
|
+ set
|
|
|
+ {
|
|
|
+ _showErrors = value;
|
|
|
+ UpdateDiagnosticButton(ShowErrorsButton, errors, value);
|
|
|
+ RefreshDiagnostics();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private bool _showWarnings;
|
|
|
+ public bool ShowWarnings
|
|
|
+ {
|
|
|
+ get => _showWarnings;
|
|
|
+ set
|
|
|
+ {
|
|
|
+ _showWarnings = value;
|
|
|
+ UpdateDiagnosticButton(ShowWarningsButton, warnings, value);
|
|
|
+ RefreshDiagnostics();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void UpdateDiagnosticButton(Button button, Dictionary<bool, Image> image, bool enabled)
|
|
|
+ {
|
|
|
+ button.Content = image[enabled];
|
|
|
+ }
|
|
|
+
|
|
|
static ScriptEditorWindow()
|
|
|
{
|
|
|
SaveCommand.InputGestures.Add(new KeyGesture(Key.S, ModifierKeys.Control));
|
|
|
@@ -127,6 +159,9 @@ namespace InABox.DynamicGrid
|
|
|
CheckButton(CompileButton, language == SyntaxLanguage.CSharp || language == SyntaxLanguage.XAML, compile);
|
|
|
CheckButton(RunButton, false, run);
|
|
|
|
|
|
+ ShowErrors = true;
|
|
|
+ ShowWarnings = false;
|
|
|
+
|
|
|
var timer = new DispatcherTimer();
|
|
|
timer.Interval = TimeSpan.FromMilliseconds(500);
|
|
|
timer.Tick += Timer_Tick;
|
|
|
@@ -354,6 +389,30 @@ namespace InABox.DynamicGrid
|
|
|
Close();
|
|
|
}
|
|
|
|
|
|
+ private List<ScriptDocument.Diagnostic> Diagnostics = new();
|
|
|
+
|
|
|
+ private void RefreshDiagnostics()
|
|
|
+ {
|
|
|
+ var diagnostics = Diagnostics.Where(x => x.Severity switch
|
|
|
+ {
|
|
|
+ DiagnosticSeverity.Error => ShowErrors,
|
|
|
+ DiagnosticSeverity.Warning => ShowWarnings,
|
|
|
+ _ => false
|
|
|
+ }).ToList();
|
|
|
+ Errors.Items.Clear();
|
|
|
+ if (bCompiled && diagnostics.Count == 0)
|
|
|
+ {
|
|
|
+ Errors.Items.Add("Script Compiled Successfully!");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ foreach(var diagnostic in diagnostics)
|
|
|
+ {
|
|
|
+ Errors.Items.Add(diagnostic.Contents);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void CompileButton_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
CheckButton(RunButton, false, run);
|
|
|
@@ -372,18 +431,10 @@ namespace InABox.DynamicGrid
|
|
|
Task.Run(() =>
|
|
|
{
|
|
|
bCompiled = viewModel.Compile();
|
|
|
+ Diagnostics = viewModel.Diagnostics;
|
|
|
Dispatcher.Invoke(() =>
|
|
|
{
|
|
|
- Errors.Items.Clear();
|
|
|
- if (bCompiled)
|
|
|
- {
|
|
|
- Errors.Items.Add("Script Compiled Successfully!");
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- var errors = viewModel.Result.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
|
|
|
- errors.ForEach(x => Errors.Items.Add(x));
|
|
|
- }
|
|
|
+ RefreshDiagnostics();
|
|
|
|
|
|
CheckButton(RunButton, bCompiled, run);
|
|
|
});
|
|
|
@@ -511,6 +562,16 @@ namespace InABox.DynamicGrid
|
|
|
e.CanExecute = _onSave != null;
|
|
|
}
|
|
|
|
|
|
+ private void ShowErrors_Click(object sender, RoutedEventArgs e)
|
|
|
+ {
|
|
|
+ ShowErrors = !ShowErrors;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void ShowWarnings_Click(object sender, RoutedEventArgs e)
|
|
|
+ {
|
|
|
+ ShowWarnings = !ShowWarnings;
|
|
|
+ }
|
|
|
+
|
|
|
#endregion
|
|
|
}
|
|
|
}
|