Add account context menu actions

This commit is contained in:
Burak Kaan Köse
2026-04-16 13:46:52 +02:00
parent 784144cd13
commit e1f53c7f9f
13 changed files with 145 additions and 1 deletions
+1
View File
@@ -31,6 +31,7 @@
<DataTemplate x:Key="ClickableAccountMenuTemplate" x:DataType="menu:AccountMenuItem">
<controls:AccountNavigationItem
x:Name="AccountItem"
ContextRequested="AccountMenuItemContextRequested"
Height="50"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
@@ -27,6 +27,7 @@ using Wino.Calendar.ViewModels;
using Wino.Mail.ViewModels;
using Wino.Mail.ViewModels.Data;
using Wino.Mail.WinUI.ViewModels;
using Wino.Controls;
using Wino.Mail.WinUI.Controls;
using Wino.Mail.WinUI.Helpers;
using Wino.Helpers;
@@ -36,6 +37,7 @@ using Wino.Messaging.Client.Accounts;
using Wino.Messaging.Client.Calendar;
using Wino.Messaging.Client.Contacts;
using Wino.Messaging.Client.Mails;
using Wino.Messaging.Client.Navigation;
using Wino.Messaging.Client.Shell;
using Wino.Messaging.UI;
using Wino.Views;
@@ -518,6 +520,65 @@ public sealed partial class WinoAppShell : Views.Abstract.WinoAppShellAbstract,
}
}
private void AccountMenuItemContextRequested(UIElement sender, ContextRequestedEventArgs args)
{
if (!ViewModel.IsMailMode)
return;
if (sender is not AccountNavigationItem accountNavigationItem ||
accountNavigationItem.DataContext is not AccountMenuItem accountMenuItem ||
!args.TryGetPosition(sender, out Point p))
{
return;
}
args.Handled = true;
var flyout = new MenuFlyout();
var manageAccountSettingsItem = new MenuFlyoutItem
{
Text = Translator.AccountContextMenu_ManageAccountSettings
};
manageAccountSettingsItem.Icon = new WinoFontIcon { Icon = WinoIconGlyph.ManageAccounts };
manageAccountSettingsItem.Click += (_, _) => NavigateToAccountSettings(accountMenuItem);
flyout.Items.Add(manageAccountSettingsItem);
var createFolderItem = new MenuFlyoutItem
{
Text = Translator.AccountContextMenu_CreateFolder
};
createFolderItem.Icon = new WinoFontIcon { Icon = WinoIconGlyph.CreateFolder };
createFolderItem.Click += async (_, _) => await ViewModel.MailClient.CreateRootFolderAsync(accountMenuItem);
flyout.Items.Add(createFolderItem);
flyout.ShowAt(accountNavigationItem, new FlyoutShowOptions
{
ShowMode = FlyoutShowMode.Standard,
Position = new Point(p.X + 30, p.Y - 20)
});
}
private void NavigateToAccountSettings(AccountMenuItem accountMenuItem)
{
ViewModel.NavigationService.ChangeApplicationMode(
WinoApplicationMode.Settings,
new ShellModeActivationContext
{
Parameter = WinoPage.ManageAccountsPage,
SuppressStartupFlows = true
});
_ = DispatcherQueue.EnqueueAsync(() =>
{
WeakReferenceMessenger.Default.Send(new SettingsRootNavigationRequested(WinoPage.ManageAccountsPage));
WeakReferenceMessenger.Default.Send(new BreadcrumbNavigationRequested(
accountMenuItem.AccountName,
WinoPage.AccountDetailsPage,
accountMenuItem.AccountId));
});
}
public void Receive(CreateNewMailWithMultipleAccountsRequested message)
{
if (!ViewModel.IsMailMode)