Files
Wino-Mail/Wino.Mail.WinUI/Controls/AppModeFooterSwitcherControl.xaml.cs
T

76 lines
2.3 KiB
C#
Raw Normal View History

2026-03-10 16:50:16 +01:00
using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
namespace Wino.Mail.WinUI.Controls;
public sealed partial class AppModeFooterSwitcherControl : UserControl
{
private readonly IStatePersistanceService _statePersistenceService;
private readonly INavigationService _navigationService;
private bool _isUpdatingSelection;
public AppModeFooterSwitcherControl()
{
_statePersistenceService = WinoApplication.Current.Services.GetRequiredService<IStatePersistanceService>();
_navigationService = WinoApplication.Current.Services.GetRequiredService<INavigationService>();
InitializeComponent();
Loaded += ControlLoaded;
Unloaded += ControlUnloaded;
}
private void ControlLoaded(object sender, RoutedEventArgs e)
{
_statePersistenceService.StatePropertyChanged += StatePropertyChanged;
UpdateSelection(_statePersistenceService.ApplicationMode);
}
private void ControlUnloaded(object sender, RoutedEventArgs e)
{
_statePersistenceService.StatePropertyChanged -= StatePropertyChanged;
}
private void StatePropertyChanged(object? sender, string propertyName)
{
if (propertyName != nameof(IStatePersistanceService.ApplicationMode))
return;
DispatcherQueue.TryEnqueue(() => UpdateSelection(_statePersistenceService.ApplicationMode));
}
private void ModeSegmentedControlSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (_isUpdatingSelection)
return;
var selectedMode = ModeSegmentedControl.SelectedIndex switch
{
1 => WinoApplicationMode.Calendar,
2 => WinoApplicationMode.Contacts,
_ => WinoApplicationMode.Mail
};
if (selectedMode == _statePersistenceService.ApplicationMode)
return;
_navigationService.ChangeApplicationMode(selectedMode);
}
private void UpdateSelection(WinoApplicationMode mode)
{
_isUpdatingSelection = true;
ModeSegmentedControl.SelectedIndex = mode switch
{
WinoApplicationMode.Calendar => 1,
WinoApplicationMode.Contacts => 2,
_ => 0
};
_isUpdatingSelection = false;
}
}