From 404e8a0c270b9658c0265afb6a668bc455870820 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@necronda.net>
Date: Mon, 18 Sep 2023 01:30:45 +0200
Subject: [PATCH] BaseDataWindow: Fix Modifier creation

---
 Elwig/Windows/AdministrationWindow.cs |  4 ++++
 Elwig/Windows/BaseDataWindow.xaml.cs  | 10 +++++++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/Elwig/Windows/AdministrationWindow.cs b/Elwig/Windows/AdministrationWindow.cs
index 2d7aa75..5b3b533 100644
--- a/Elwig/Windows/AdministrationWindow.cs
+++ b/Elwig/Windows/AdministrationWindow.cs
@@ -462,6 +462,10 @@ namespace Elwig.Windows {
             InputTextChanged((TextBox)sender, Validator.CheckInteger);
         }
 
+        protected void DecimalInput_TextChanged(object sender, RoutedEventArgs evt) {
+            InputTextChanged((TextBox)sender, Validator.CheckDecimal);
+        }
+
         protected void PartialDateInput_TextChanged(object sender, RoutedEventArgs evt) {
             InputTextChanged((TextBox)sender, Validator.CheckPartialDate);
         }
diff --git a/Elwig/Windows/BaseDataWindow.xaml.cs b/Elwig/Windows/BaseDataWindow.xaml.cs
index ba7b144..68e237f 100644
--- a/Elwig/Windows/BaseDataWindow.xaml.cs
+++ b/Elwig/Windows/BaseDataWindow.xaml.cs
@@ -117,6 +117,7 @@ namespace Elwig.Windows {
             await Context.SaveChangesAsync();
 
             foreach (var mod in ModifierList.Where(m => !ModifierIds.ContainsKey(m))) {
+                if (mod.ModId == null) continue;
                 await Context.AddAsync(mod);
             }
             await Context.SaveChangesAsync();
@@ -321,6 +322,7 @@ namespace Elwig.Windows {
         }
 
         private void SeasonModifierRelInput_TextChanged(object sender, TextChangedEventArgs evt) {
+            DecimalInput_TextChanged(sender, evt);
             if ((!IsEditing && !IsCreating) || SeasonModifierList.SelectedItem is not Modifier mod) return;
             ModifiersChanged = ModifiersChanged || (SeasonModifierRelInput.Text ?? "") != ((SeasonModifierList.SelectedItem as Modifier)?.Rel?.ToString() ?? "");
             if (ModifierUpdate) return;
@@ -331,11 +333,13 @@ namespace Elwig.Windows {
         }
 
         private void SeasonModifierAbsInput_TextChanged(object sender, TextChangedEventArgs evt) {
-            if ((!IsEditing && !IsCreating) || SeasonModifierList.SelectedItem is not Modifier mod) return;
+            DecimalInput_TextChanged(sender, evt);
+            if ((!IsEditing && !IsCreating) || SeasonModifierList.SelectedItem is not Modifier mod || SeasonList.SelectedItem is not Season s) return;
             ModifiersChanged = ModifiersChanged || (SeasonModifierAbsInput.Text ?? "") != ((SeasonModifierList.SelectedItem as Modifier)?.Abs?.ToString() ?? "");
             if (ModifierUpdate) return;
-            mod.Abs = decimal.TryParse(SeasonModifierAbsInput.Text, out var v) ? v : null;
-            if (mod.Abs != null) SeasonModifierRelInput.Text = "";
+            // FIXME ValueStr does not work in ModifierList when modifier is newly created
+            mod.AbsValue = decimal.TryParse(SeasonModifierAbsInput.Text, out var v) ? Utils.DecToDb(v, s.Precision) : null;
+            if (mod.AbsValue != null) SeasonModifierRelInput.Text = "";
             CollectionViewSource.GetDefaultView(ModifierList).Refresh();
             UpdateButtons();
         }