From 3a73265a7564cebd651789b9cf654162d6151ea3 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Mon, 18 Sep 2023 21:46:14 +0200 Subject: [PATCH] ContextWindow: Change renew context event handling --- Elwig/Windows/AdministrationWindow.cs | 18 ++++++------ Elwig/Windows/AreaComAdminWindow.xaml.cs | 4 +-- Elwig/Windows/BaseDataWindow.xaml.cs | 4 +-- Elwig/Windows/ChartWindow.xaml.cs | 4 +-- Elwig/Windows/ContextWindow.cs | 36 +++++++++++++++-------- Elwig/Windows/DeliveryAdminWindow.xaml.cs | 6 ++-- Elwig/Windows/MemberAdminWindow.xaml.cs | 4 +-- 7 files changed, 44 insertions(+), 32 deletions(-) diff --git a/Elwig/Windows/AdministrationWindow.cs b/Elwig/Windows/AdministrationWindow.cs index 5b3b533..5630c09 100644 --- a/Elwig/Windows/AdministrationWindow.cs +++ b/Elwig/Windows/AdministrationWindow.cs @@ -16,20 +16,20 @@ namespace Elwig.Windows { protected Control[] ExemptInputs { private get; set; } protected Control[] RequiredInputs { private get; set; } - private bool _IsEditing; - private bool _IsCreating; + private bool _isEditing; + private bool _isCreating; protected bool IsEditing { - get { return _IsEditing; } + get { return _isEditing; } set { - _IsEditing = value; - LockContext = IsEditing; + _isEditing = value; + LockContext = IsEditing || IsCreating; } } protected bool IsCreating { - get { return _IsCreating; } + get { return _isCreating; } set { - _IsCreating = value; - LockContext = IsEditing; + _isCreating = value; + LockContext = IsEditing || IsCreating; } } protected bool DoShowWarningWindows = true; @@ -99,7 +99,7 @@ namespace Elwig.Windows { abstract protected void UpdateButtons(); - protected override async Task RenewContext() { + protected override async Task OnRenewContext() { for (int i = 0; i < PlzInputs.Length; i++) UpdatePlz(PlzInputs[i], PlzOrtInputs[i]); } diff --git a/Elwig/Windows/AreaComAdminWindow.xaml.cs b/Elwig/Windows/AreaComAdminWindow.xaml.cs index ade9d39..efa605e 100644 --- a/Elwig/Windows/AreaComAdminWindow.xaml.cs +++ b/Elwig/Windows/AreaComAdminWindow.xaml.cs @@ -95,8 +95,8 @@ namespace Elwig.Windows { ValidateRequiredInputs(); } - protected override async Task RenewContext() { - await base.RenewContext(); + protected override async Task OnRenewContext() { + await base.OnRenewContext(); ControlUtils.RenewItemsSource(KgInput, await Context.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).ToListAsync(), i => (i as AT_Kg)?.KgNr); ControlUtils.RenewItemsSource(AreaComTypeInput, await Context.AreaCommitmentTypes.OrderBy(v => v.VtrgId).ToListAsync(), i => (i as AreaComType)?.VtrgId); ControlUtils.RenewItemsSource(WineCultivationInput, await Context.WineCultivations.OrderBy(c => c.Name).ToListAsync(), i => (i as WineCult)?.CultId); diff --git a/Elwig/Windows/BaseDataWindow.xaml.cs b/Elwig/Windows/BaseDataWindow.xaml.cs index 8750036..6e94df4 100644 --- a/Elwig/Windows/BaseDataWindow.xaml.cs +++ b/Elwig/Windows/BaseDataWindow.xaml.cs @@ -52,8 +52,8 @@ namespace Elwig.Windows { FillInputs(App.Client); } - protected override async Task RenewContext() { - await base.RenewContext(); + protected override async Task OnRenewContext() { + await base.OnRenewContext(); ControlUtils.RenewItemsSource(SeasonList, await Context.Seasons.OrderByDescending(s => s.Year).ToListAsync(), s => (s as Season)?.Year, null, ControlUtils.RenewSourceDefault.First); var year = (SeasonList.SelectedItem as Season)?.Year; ControlUtils.RenewItemsSource(SeasonModifierList, await Context.Modifiers.Where(m => m.Year == year).OrderBy(m => m.Ordering).ToListAsync(), m => (m as Modifier)?.ModId); diff --git a/Elwig/Windows/ChartWindow.xaml.cs b/Elwig/Windows/ChartWindow.xaml.cs index 8a540bc..30b0d5a 100644 --- a/Elwig/Windows/ChartWindow.xaml.cs +++ b/Elwig/Windows/ChartWindow.xaml.cs @@ -214,8 +214,8 @@ namespace Elwig.Windows { FinishInputFilling(); } - protected override async Task RenewContext() { - await base.RenewContext(); + protected override async Task OnRenewContext() { + await base.OnRenewContext(); await RefreshGraphList(); } diff --git a/Elwig/Windows/ContextWindow.cs b/Elwig/Windows/ContextWindow.cs index 47bd595..f07e375 100644 --- a/Elwig/Windows/ContextWindow.cs +++ b/Elwig/Windows/ContextWindow.cs @@ -7,30 +7,32 @@ using System.Windows.Threading; namespace Elwig.Windows { public abstract class ContextWindow : Window { + public static readonly int RenewSec = 10; + protected AppDbContext Context { get; private set; } protected bool LockContext { get; set; } = false; - private readonly DispatcherTimer ContextRenewTimer; - private static readonly int ContextRenewSec = 10; + private readonly DispatcherTimer _timer; + private bool _renewPending = false; public ContextWindow() : base() { - ContextRenewTimer = new DispatcherTimer(); - ContextRenewTimer.Tick += new EventHandler(OnRenewContext); - ContextRenewTimer.Interval = new TimeSpan(0, 0, ContextRenewSec); - ContextRenewTimer.Start(); + _timer = new DispatcherTimer(); + _timer.Tick += new EventHandler(OnShouldRenewContext); + _timer.Interval = new TimeSpan(0, 0, RenewSec); + _timer.Start(); Context = new(); Loaded += OnLoaded; } - private void OnRenewContext(object? sender, EventArgs evt) { - if (LockContext || !Context.HasBackendChanged) return; - Context.Dispose(); - Context = new(); - RenewContext().GetAwaiter().GetResult(); + private async void OnShouldRenewContext(object? sender, EventArgs evt) { + if (!Context.HasBackendChanged) return; + _renewPending = true; + if (LockContext) return; + await RenewContext(); } private void OnLoaded(object sender, RoutedEventArgs evt) { - RenewContext().GetAwaiter().GetResult(); + OnRenewContext().GetAwaiter().GetResult(); } protected override void OnClosed(EventArgs evt) { @@ -38,6 +40,14 @@ namespace Elwig.Windows { Context.Dispose(); } - abstract protected Task RenewContext(); + protected async Task RenewContext() { + if (!_renewPending) return; + Context.Dispose(); + Context = new(); + await OnRenewContext(); + _renewPending = false; + } + + abstract protected Task OnRenewContext(); } } diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs index ea24eba..3c923ab 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs +++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs @@ -415,8 +415,8 @@ namespace Elwig.Windows { } } - protected override async Task RenewContext() { - await base.RenewContext(); + protected override async Task OnRenewContext() { + await base.OnRenewContext(); if (Member != null) { if (Context.Members.Find(Member.MgNr) is not Member m) { @@ -798,6 +798,7 @@ namespace Elwig.Windows { } FinishButton.Cursor = null; DeliveryList.SelectedItem = null; + await RenewContext(); RefreshInputs(); InitInputs(); } @@ -820,6 +821,7 @@ namespace Elwig.Windows { DisableWeighingButtons(); HideFinishNewPartDeliveryCancelButtons(); ShowNewEditDeleteButtons(); + await RenewContext(); RefreshInputs(); ClearInputStates(); LockInputs(); diff --git a/Elwig/Windows/MemberAdminWindow.xaml.cs b/Elwig/Windows/MemberAdminWindow.xaml.cs index b68d5d8..ff1f5ed 100644 --- a/Elwig/Windows/MemberAdminWindow.xaml.cs +++ b/Elwig/Windows/MemberAdminWindow.xaml.cs @@ -131,8 +131,8 @@ namespace Elwig.Windows { ValidateRequiredInputs(); } - protected override async Task RenewContext() { - await base.RenewContext(); + protected override async Task OnRenewContext() { + await base.OnRenewContext(); ControlUtils.RenewItemsSource(BranchInput, await Context.Branches.OrderBy(b => b.Name).ToListAsync(), i => (i as Branch)?.ZwstId); ControlUtils.RenewItemsSource(DefaultKgInput, await Context.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).ToListAsync(), i => (i as AT_Kg)?.KgNr); await RefreshMemberList();