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(); }