Contacts, thread animation and image preview control improvements.

This commit is contained in:
Burak Kaan Köse
2026-02-09 22:39:30 +01:00
parent e559a79506
commit 0999c71578
26 changed files with 1636 additions and 756 deletions
@@ -1,5 +1,9 @@
using System;
using System.ComponentModel;
using System.Linq;
using Microsoft.UI.Xaml.Controls;
using Wino.Core.Domain.Entities.Shared;
using Wino.Mail.ViewModels;
using Wino.Views.Abstract;
namespace Wino.Views.Settings;
@@ -9,6 +13,9 @@ public sealed partial class ContactsPage : ContactsPageAbstract
public ContactsPage()
{
InitializeComponent();
ViewModel.PropertyChanged += ViewModelPropertyChanged;
Unloaded += ContactsPageUnloaded;
}
private void EditContact_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
@@ -34,4 +41,73 @@ public sealed partial class ContactsPage : ContactsPageAbstract
ViewModel.DeleteContactCommand.Execute(contact);
}
}
}
private void ContactsListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (sender is not ListView)
return;
if (!ViewModel.IsSelectionMode)
{
ClearSelection();
return;
}
foreach (var removedItem in e.RemovedItems.OfType<AccountContact>())
{
var selectedContact = ViewModel.SelectedContacts.FirstOrDefault(c =>
string.Equals(c.Address, removedItem.Address, StringComparison.OrdinalIgnoreCase));
if (selectedContact != null)
{
ViewModel.SelectedContacts.Remove(selectedContact);
}
}
foreach (var addedItem in e.AddedItems.OfType<AccountContact>())
{
var alreadySelected = ViewModel.SelectedContacts.Any(c =>
string.Equals(c.Address, addedItem.Address, StringComparison.OrdinalIgnoreCase));
if (!alreadySelected)
{
ViewModel.SelectedContacts.Add(addedItem);
}
}
}
private void SelectAllContacts_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
{
if (!ViewModel.IsSelectionMode)
return;
ContactsListView.SelectAll();
}
private void ClearSelection_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
{
ClearSelection();
}
private void ViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(ContactsPageViewModel.IsSelectionMode) && !ViewModel.IsSelectionMode)
{
ClearSelection();
}
}
private void ContactsPageUnloaded(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
{
ViewModel.PropertyChanged -= ViewModelPropertyChanged;
Unloaded -= ContactsPageUnloaded;
}
private void ClearSelection()
{
ContactsListView.SelectionChanged -= ContactsListView_SelectionChanged;
ContactsListView.SelectedItems.Clear();
ContactsListView.SelectionChanged += ContactsListView_SelectionChanged;
ViewModel.SelectedContacts.Clear();
}
}