Files
Wino-Mail/Wino.Mail/MenuFlyouts/MoveButtonFlyout.cs

88 lines
2.3 KiB
C#
Raw Permalink Normal View History

2024-04-18 01:44:37 +02:00
using System;
using System.Collections.Generic;
using System.Linq;
using Windows.Foundation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Wino.Core.Domain.Entities.Mail;
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
namespace Wino.MenuFlyouts;
public class MoveButtonMenuItemClickedEventArgs
{
public Guid ClickedFolderId { get; set; }
}
public partial class MoveButtonFlyout : MenuFlyout
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
public event TypedEventHandler<MoveButtonFlyout, MoveButtonMenuItemClickedEventArgs> MenuItemClick;
public static readonly DependencyProperty FoldersProperty = DependencyProperty.Register(nameof(Folders), typeof(List<MailItemFolder>), typeof(MoveButtonFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnFoldersChanged)));
public List<MailItemFolder> Folders
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
get { return (List<MailItemFolder>)GetValue(FoldersProperty); }
set { SetValue(FoldersProperty, value); }
2024-04-18 01:44:37 +02:00
}
2025-02-16 11:54:23 +01:00
private static void OnFoldersChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
if (obj is MoveButtonFlyout menu)
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
menu.InitializeMenu();
2024-04-18 01:44:37 +02:00
}
2025-02-16 11:54:23 +01:00
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
private void InitializeMenu()
{
Dispose();
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
Items.Clear();
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
if (Folders == null || !Folders.Any())
return;
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
// TODO: Child folders.
2025-02-16 11:54:23 +01:00
foreach (var item in Folders)
{
// We don't expect this, but it crashes startup.
// Just to be on the safe side.
if (item.FolderName != null)
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
var folderMenuItem = new MenuFlyoutItem()
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
Tag = item,
Text = item.FolderName
};
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
folderMenuItem.Click += MenuItemClicked;
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
Items.Add(folderMenuItem);
2024-04-18 01:44:37 +02:00
}
}
2025-02-16 11:54:23 +01:00
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
private void MenuItemClicked(object sender, RoutedEventArgs e)
{
var clickedFolder = (sender as MenuFlyoutItem).Tag as MailItemFolder;
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
MenuItemClick?.Invoke(this, new MoveButtonMenuItemClickedEventArgs()
{
ClickedFolderId = clickedFolder.Id
});
}
2025-02-16 11:54:23 +01:00
public void Dispose()
{
foreach (var item in Items)
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
if (item is MenuFlyoutItem menuItem)
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
menuItem.Click -= MenuItemClicked;
2024-04-18 01:44:37 +02:00
}
}
}
}